1.动态SQL编写
1.1 if标签
if标签是我们最常使用的。在查询、删除、更新的时候很可能会使用到。必须结合 test 属性联合使用
a. 在WHERE 条件中使用 if 标签
这是常见的一种现象,我们在进行按条件查询的时候,可能会有多种情况。
在此 SQL 语句中, where 1=1 是多条件拼接时的小技巧, 后面的条件查询就可以都用 and 了。
测试:
结果:
测试:
此 if 标签的 test 属性值是一个符合 OGNL 的表达式,表达式可以是 true 或 false。如果表达式返回的是数值,0为 false, 非 0 为 true
b. 在UPDATE更新列中使用 if 标签
有时候我们不希望更新所有的字段,只更新有变化的字段
测试:
结果:只修改了teacher_name列
c. 在 INSERT 动态插入中使用 if 标签
我们插入数据库中的一条记录, 不是每一个字段都有值的, 而是动态变化的。在这时候使用 if 标签,可以我们解决这个问题。
测试:
插入数据成功
接口:
1.2choose标签
choose when otherwise 标签可以帮我们实现 if else 的逻辑。一个 choose 标签至少有一个 when, 最多一个otherwise。when 相当于java中的if, otherwise 相当于java中的else,when..otherwise相当于java中的if..else结构
获取老师的数量:
当age!=0时,按照age查找老师的数量
当age=0时,按照name查找老师
上述的二者都不满足条件时,返回0
测试: age和name都不满足条件
测试: age不满足条件,name满足条件
1.3trim(set、where)标签
这三个其实解决的是类似的问题。如我们在写前面的[在 WHERE 条件中使用 if 标签 SQL 的时候, where 1=1 这个条件我们是不希望存在的。
where标签
测试:
set
测试:
trim
set和where其实都是trim标签的一种类型,该两种功能都可以使用trim标签进行实现。
trim 来表示 where
如where标签,我们也可以写成
表示当trim中含有内容时,添加where并且第一个and或or会将其去掉。
如果没有内容,则不添加 where。
trim来表示set
set标签可以如下表示
表示当trim中含有内容时,添加set,且最后的内容为”,”时,会将其去掉。
trim 的几个属性
prefix:当trim元素包含有内容时,增加prefix所指定的前缀
prefixOverrides:当trim元素包含有内容时,去除prefixOverrides指定的前缀
suffix:当 trim元素包含有内容时,增加 suffix 所指定的后缀
suffixOverrides:当trim元素包含有内容时,去除suffixOverrides指定的后缀
1.4foreach 标签
foreach标签可以对数组,Map,List集合进行遍历。
foreach中有以下几个属性:
collection:必填, 集合/数组/Map的名称
item:变量名。即从迭代的对象中取出的每一个值
index:索引的属性名。当迭代的对象为 Map 时,该值为 Map 中的 Key
open:循环开头的字符串
close:循环结束的字符串
separator:每次循环的分隔符
a.在where中使用foreach标签
collection 中值的设定:
跟接口方法中的参数相关。1,只有一个数组参数或集合参数默认情况:集合collection=list, 数组是collection=array
当参数为集合类型时:
当参数为数组时:
2,使用 @Param 来指定参数的名称,如我们在参数前@Param("ids"),则就填写 collection=ids
3,如果参数是Map,指定为 Map 中的对应的 Key 即可。其实上面的@Param最后也是转化为 Map的。
方法一:将paramMap放到另一个map中,当成参数进行传值
将List集合放到Map中
方法一存在缺点:需要创建一个map,用它来存放paramMap
方法二:使用 @Param
4、如果参数是对象使用属性即可。
测试
b. foreach 实现批量插入
测试
标签:trim,Map,set,标签,测试,SQL,Mybatis,动态,where From: https://blog.csdn.net/Moon_Drop_LAN/article/details/141091435