判断一个参数是否是有值的,如果没值,就会隐藏if中的SQL。
应用场景如下:
在注册用户功能时候,有些时候像头像就不是非必填的,如果没有填就是一个默认头像,也就是说,注册分为两种字段:必填字段和⾮必填字段,if 标签就是为了解决添加用户时候有不确定的字段传⼊时候的SQL拼接了。具体使用方法如下:
以数据库用户表为列,头像字段为非必填参数,且设置了默认值:

此时在注册添加用户时候,photo就是非必填字段:
mapper接口:

xml实现:

此时单元测试在传或不传photo时SQL均不会报错:
不传photo时生成SQL:

传photo时生成的SQL:

此时可以看到记录均添加成功:

注意 test 中填写的,是传⼊对象中的属性,不是数据库字段。
(所以在设计时候尽量保证数据库字段和对象属性名称一致)
trim标签最主要的作用是:去除SQL语句前后多余的某个字符。
之前的插⼊⽤户功能,只是有⼀个 photo 字段可能是选填项,如果有多个字段,⼀般考虑使⽤ trim 标签结合 if 标签,对多个字段都采取动态⽣成的⽅式,具体使用如下:
mapper接口声明如下:

xml实现如下:

属性解释如下:
这里我们整个语句块是(xxx),以()作为前后缀,且要去掉最后的 ,
(xxx,xxx,xxx ,)加黑的 , 就是要去除掉的,防止SQL报错执行失败
详情:在以上 sql 动态解析时,会将第⼀个 trim 部分做如下处理:
suffixOverrides 配置去掉最后⼀个 ,单元测试如下:

这里假设传入的三个参数都是有值的,拼接的SQL如下:


where标签最主要的作用:实现查询中的where SQL替换的,它可以实现如果没有任何的查询条件,那么它可以去除查询中的where SQL;如果存在查询条件时,那么会生成where的SQL查询;并且使用where标签可以自动去除 最前面 的一个 and 字符。
where标签就是用户做条件查询时候的动态拼接;
比如在查询用户时候,输入查询条件就根据条件进行查询,如果没有输入查询条件就视为查询全部这种业务需求。
具体使用如下:
mapper接口:

xml实现:


这两种写法单元测试如下:
当传入有id,根据id查询时:

能够正确查询出id为1的用户记录:

当传入id为null时,也就是不传id的业务:

也能够正确查询出数据库中全部记录(博主测试时候为了方便打印输出数据表中就只有一个用户):

同时,这个where标签等价于 :
trim prefix=“where” prefixOverrides=“and” 标签
xml实现如下:

单元测试 id为1 或者 null 时情况如上不变,所以 where标签 和 trim标签可做等价替换。
set 标签作用: 根据传⼊的⽤户对象属性来更新⽤户数据,使⽤ set 标签来指定动态内容。
进行修改操作时,配合 if 标签来处理非必传参数,特点是会自动去除掉最后一个英文逗号(,);
使用详情如下:
mapper接口:

xml实现:

单元测试:
修改id为1的用户信息:

执行结果如下:

数据表记录被成功修改:

和 where 标签一样,set 标签也可以使⽤ trim prefix="set" suffixOverrides="," 替换:

单元测试结果一样,同样能正确拼接SQL:


作用:foreach标签是对集合进行循环的,对集合进⾏遍历时使⽤该标签。
foreach标签属性介绍:
使用示例:根据传入的多个用户id进行删除用户信息:
mapper接口方法声明:

xml实现:

先在数据库中插入三条记录,id分别为下:

单元测试如下:

测试结果(拼接SQL)如下:

执行之后成功删除了id为25 26 27的三条用户记录:

注意事项:
