MyBatis:动态SQL标签解读与示例

我们在日常生活中常见到这样的条件查询,条件的填写是自如的,并不是规定好必须都填写或者都不填,那么这就需要我们用的动态sql。


总结:test值的OGNL中可以写的值的总结

  • statement调用方法传递过来的对象参数的get属性

  • statement调用方法传递过来的map参数的key

  • statement调用方法传递过来的map参数的key,这个key若为对象,可以填入"key.get属性"

一、if:

if其实可以理解为简单的条件判断,我们下面的例子是这样的:姓名和年龄上限,用户可以有这样的选择(都填,都不填,只填一个),具体实现如下。

映射文件:

MyBatis:动态SQL标签解读与示例

说明:test里放的是resultType实体的属性以及相关判断

测试类:

MyBatis:动态SQL标签解读与示例

结果:

MyBatis:动态SQL标签解读与示例


二、where:

上面的 where 1=1 如果在很多用户同时访问同一个操作时,就会大大降低系统的运行效率,针对这一情况,mybatis提供了where标签。

其映射文件是这样的:

MyBatis:动态SQL标签解读与示例


三、choose:

choose里面包含两个子标签:otherwise、when,其实可以简单的理解为java里的switch case语句,这里的otherwise相当于语句里的default,而when相当于case。

映射文件:

MyBatis:动态SQL标签解读与示例

测试类、结果和上文相同。


四、foreachList数组:

比如有这样的需求,将id=1、20、25,的信息打印出来,这就用到了我们的foreach数组了。

情况一:

映射文件:

MyBatis:动态SQL标签解读与示例

说明:

  1. collection:要遍历的东西,这里我们遍历的是list

  2. item:别名,随便起,这里的名字决定了下面的sql#{id}

  3. open、close、separator:和sql一起可以拼接成完整的sql代码

测试类:

MyBatis:动态SQL标签解读与示例

结果:

MyBatis:动态SQL标签解读与示例

情况二、list里放的是实体对象:

映射文件:

MyBatis:动态SQL标签解读与示例

测试类:

MyBatis:动态SQL标签解读与示例


五、foreach数组:

映射文件:

MyBatis:动态SQL标签解读与示例

测试类:

MyBatis:动态SQL标签解读与示例

结果:

MyBatis:动态SQL标签解读与示例

六、sql片段:

在以前我们的映射文件是这样的:

MyBatis:动态SQL标签解读与示例

每次select id,name,age,score from stu 都是重复的,为了进一步提高效率,我们把这些抽取出来,每次用到的时候直接调用就行,这就是sql片段,然后映射文件是这样的。

MyBatis:动态SQL标签解读与示例

<sql id="aaa"></sql>把片段放里面

<include refid="aaa"></include>用到的时候用include调用就行