【Mybatis】动态sql
一.动态sql
根据需求,动态的拼接sql
1.添加
根据用户的输入情况,进行动态插入
<if>标签
根据if标签判断某个字段是否为空,来动态的拼接sql语句
1.1注解方式
使用<script>标签将sql语句括起来
注意if标签中的test参数是传入对象中的属性,不是数据库字段
1.2xml方式
<trim>标签
处理符号问题<trim>标签
• prefix:表⽰整个语句块,以prefix的值作为前缀
• suffix:表⽰整个语句块,以suffix的值作为后缀
• prefixOverrides:表⽰整个语句块要去除掉的前缀
• suffixOverrides:表⽰整个语句块要去除掉的后缀
2.查询
处理and
<trim>标签
问题:如果查询条件为空,where还会留下来
解决方式:把where 1==1 写在外面 , <trim>标签内用and连接.
<where>标签
也可以去除最前面的and
如果查询条件为空,where标签会自动去除where关键字 [更优雅]
3.修改
处理逗号问题
<trim>标签
<set>标签
[更优雅]
4.删除
批量删除
<foreach>标签
对集合进行遍历时可以使用该标签
有如下参数
• collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
• item:遍历时的每⼀个对象
• open:语句块开头的字符串
• close:语句块结束的字符串
• separator:每次遍历之间间隔的字符串
例如:根据多个id,删除用户数据
接口方法
xml实现
<include>标签
使用场景:在xml映射文件中配置SQL时,有时会存在很多重复的片段,此时就会存在很多冗余的代码.此时我们可以对重复的代码片段进行收取,将其用<sql>标签封装.然后再根据该<sql>标签的id,用<include>标签来引用这段sql片段.
封装:
引用:
总结
动态sql建议用xml来写, 可读性更高,并且还有书写有提示.