MyBatis学习笔记(四)——动态 SQL

动态SQL一直是MyBatis最强大的功能之一。我们以前在使用JDBC的时候,经常要留意一个sql语句中的空格或者逗号,如果缺少空格或逗号,编译器就会出错,这有时候会让我们觉得很痛苦。然而,MyBatis的动态SQL可以帮我们解决这一类问题。

一、if和where

我们可以像这样使用if和where标签(在Mapper.xml文件中):

在使用<if>标签时,当test属性的值满足条件时,才会执行标签内的内容。

在使用<where>标签,where 元素知道只有在一个以上的if条件有值的情况下才去插入"WHERE"子句。而且,若最后的内容是"AND"或"OR"开头的,where 元素也知道如何将他们去除。

OrderQueryVo是包装类,将Order和OrderDetail类包装成一个类。代码如下:

二、foreach

有时候我们希望查询语句是这样select id,user_id,number,createtime,note from orders where id in (1,2)这时候需要用到<foreach>标签。

修改OrderQueryVo包装类代码,如下:

我们可这么使用(在OrderMapper.xml文件中):

三、choose(when ,otherwise)

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

可以这么使用(在OrderMapper.xml文件中):

四、sql片段

通过sql片段可以将通用的sql语句抽取出来,单独定义,在其它的statement中可以引用sql片段。其中通用的sql语句,一般用在:where条件、查询列。

4.1 定义sql片段

在OrderMapper.xml文件中 定义sql片段,如下:

4.2 使用sql片段

使用<include>标签对上面定义的sql片段加以引用,如下:

猜你喜欢

转载自blog.csdn.net/weixin_41072833/article/details/81179128