Mybatis入门:学习记录(3)

上次粗俗了解了一点sql映射和mybatis编写sql语句,在说到mybatis优点时也知道了它支持动态SQL,

动态SQL了解一下

动态SQL是mybatis的一个强大特性。在使用JDBC操作数据时没如果查询条件特别多,将条件串联成SQL字符串是一件非常

痛苦的事情。通过解决办法是写很多的if-else条件语句对字符串进行拼接,并确保不能少打一些东西。

动态SQL改善了这一情形。它基于OGNL(应用于Java中的一个开源的表达式语言)的表达式,方便在sql语句中实现某些逻辑。

了解下几个实现动态SQL的元素:

if:简单的条件选择。

choose(when,otherwise):相当于java中switch语句,与when,otherwise搭配使用

set:解决动态更新语句。

trim:可以灵活去除多余的关键字

foreach:迭代一个集合,通常用于in条件。


查询语句if :

test:用于对入参参数进行条件判断

这里用了trim所以没有写where

trim了解一下:

prefix:前缀,再trim包含的内容加上前缀,如此处的where

prefixOverrides:对trim包含的内容首部进行制定内容(如此处的‘and’和‘or’)的忽略。

suffix:后缀,在trim包含的内容加上后缀

suffixOverrides:对trim包含的内容尾部进行制定内容的忽略。

如下图的尾部忽略逗号,以及在后缀加上where条件


上面提到的set元素也可以剔除追加到条件末尾的的任何不想关的逗号。ps:习惯性使用了trim。

set元素就是<set></set>标签替换了trim。set元素包含所有<if>判断入参。

foreach元素用来迭代数组类型或集合。


这里上图我们传入的是一个Map集合。

collection必须指定,如果传入的是一个List,属性值该为list;如果传入是一个数组类型,属性值该为array;如果传入的为多参数可以封装成一个Map,属性值为传入的Map集合的对应key名称。

item:表示集合中每一个元素进行迭代的别名。

index:表示迭代过程中,每次迭代到的位置。

open:表示语句从什么开始(既然是in条件语句 当然是从‘(’开始)

close:表示语句以什么结束(同理‘)’结束)

separator:表示每次迭代之间以很么符号作为分隔符(还用问吗‘,’)

foreach标签里填入你要遍历的就可以了。


了解了上面的choose也很好理解:

when元素:当when条件满足时就会输出该when元素的内容,一旦条件满足,就会跳出choose。

otherwise:当条件都不满足时,就会输出otherwise的内容。

看完以上所有的mybaties的分页也好推出。mybatis的分页功能是基于内存的分页,即查出所有记录,再按起始位置和页码大小取出结果。

分页有总共页数(我们可以利用一个count()取出总记录数):总记录数/页码大小=总页数。

分页关键字:limit 下标从0开始。

当我们要查询的数据是有条件时,取总记录数也应该是有与之相应的条件的。

总结:

动态sql比起普通拼接sql要好太多,灵活性更高,简便,与之匹配的功能提现强大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值