目录
if标签
where标签
trim标签
choose、when、otherwise
foreach标签
Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。
sql表字段如下:
用于不确定根据哪几个字段查询的情况下,则可判断如果有此字段的值则拼接,否则跳过。
if标签可通过test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中反之标签中的内容不会执行
最后执行的sql语句:
select * from emp where 1=1 and name like concat('%',?,'%') and gender = ? and ...
跟单独使用if标签的区别就是加了where标签,可以不用在sql语句中写where 1=1,where标签中的if语句满足会自动在sql语句中加入where关键字
where和if一般结合使用:
a>若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
b>若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的
and去掉
注意:where标签不能去掉条件最后多余的and
trim用于去掉或添加标签中的内容常用属性:
prefix:在trim标签中的内容的前面添加某些内容
prefixOverrides:在trim标签中的内容的前面去掉某些内容
suffix:在trim标签中的内容的后面添加某些内容
suffixOverrides:在trim标签中的内容的后面去掉某些内容
比如,条件查询需要where关键字,那么就可以在trim标签中添加prefix="where"
choose、when、otherwise相当于if...else if..else
只会拼接一个
foreach 标签通常用于对集合进行迭代,生成动态的SQL语句。
collection 属性指定要迭代的集合
item 属性指定在迭代过程中每个元素的别名
index 属性指定在迭代过程中的索引值
open 属性指定在迭代开始时插入的字符串
separator 属性指定在每个元素之间插入的字符串
close 属性指定在迭代结束时插入的字符串。
示例如下:
sql:insert into emp values (null, ?, ?, ?, ?, ?)
insert into emp values
(null,#{emp.name},#{emp.gender},#{emp.salary},#{emp.joinDate},#{emp.deptId})
sql:delete from emp where ? or ? or?
delete from emp where
id = #{eid}
sql:delete from emp where id in (?,?,?,...)
delete from emp where id in
#{eid}