MyBatis:动态SQL标签解读与示例
我们在日常生活中常见到这样的条件查询,条件的填写是自如的,并不是规定好必须都填写或者都不填,那么这就需要我们用的动态sql。
总结:test值的OGNL中可以写的值的总结
-
statement调用方法传递过来的对象参数的get属性
-
statement调用方法传递过来的map参数的key
-
statement调用方法传递过来的map参数的key,这个key若为对象,可以填入"key.get属性"
一、if:
if其实可以理解为简单的条件判断,我们下面的例子是这样的:姓名和年龄上限,用户可以有这样的选择(都填,都不填,只填一个),具体实现如下。
映射文件:
说明:test里放的是resultType实体的属性以及相关判断
测试类:
结果:
二、where:
上面的 where 1=1 如果在很多用户同时访问同一个操作时,就会大大降低系统的运行效率,针对这一情况,mybatis提供了where标签。
其映射文件是这样的:
三、choose:
choose里面包含两个子标签:otherwise、when,其实可以简单的理解为java里的switch case语句,这里的otherwise相当于语句里的default,而when相当于case。
映射文件:
测试类、结果和上文相同。
四、foreachList数组:
比如有这样的需求,将id=1、20、25,的信息打印出来,这就用到了我们的foreach数组了。
情况一:
映射文件:
说明:
-
collection:要遍历的东西,这里我们遍历的是list
-
item:别名,随便起,这里的名字决定了下面的sql#{id}
-
open、close、separator:和sql一起可以拼接成完整的sql代码
测试类:
结果:
情况二、list里放的是实体对象:
映射文件:
测试类:
五、foreach数组:
映射文件:
测试类:
结果:
六、sql片段:
在以前我们的映射文件是这样的:
每次select id,name,age,score from stu 都是重复的,为了进一步提高效率,我们把这些抽取出来,每次用到的时候直接调用就行,这就是sql片段,然后映射文件是这样的。
<sql id="aaa"></sql>把片段放里面
<include refid="aaa"></include>用到的时候用include调用就行