MyBatis进阶
1. 动态SQL
1.1 <if>标签的使用(xml版本)
动态 SQL 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。
现在有一个需求.注册分为两种字段:必填字段和⾮必填字段,那如果在添加用户的时候有不确定的字段传⼊,程序应该如何实现呢?
我们使用sql语句来进行实现
java代码的实现,此时我们使用<if>标签实现动态sql
我们重新分析一下需求
运行结果 此时如果有多个属性都是非必选字段,我们通过navicat来进行设置
java代码
但是如果字段太多,会因为逗号报错,成功案例
失败案例: 我们如果只设置中间的字段,我们发现多了个逗号
为了解决这个问题我们引入<trim>标签
1.2 <trim>标签的使用(xml版本)
标签中有如下属性:
• prefix:表⽰整个语句块,以prefix的值作为前缀
• suffix:表⽰整个语句块,以suffix的值作为后缀
• prefixOverrides:表⽰整个语句块要去除掉的前缀
• suffixOverrides:表⽰整个语句块要去除掉的后缀
java代码演示
1.3 <if>标签的使用(注解方式,了解即可很复杂)
建议放在记事本里面进行修改,我们使用<script>标签把它们括起来
一般写动态sql,xml和注解要么一起用,要么只用xml
1.4 <where标签>
我们有个应用场景,我们根据用户的选项来生成商品的信息,也就是动态的生成where条件
java代码 但是我们发现一个和刚刚多出来的,一样的问题
此时我们再使用<trim>标签来解决
where标签的一些写法提示
where标签的其他写法
1.5 <set>标签
<set>标签的作用
1. 生成set关键字
2. 去掉整个代码后的,
简而言之: 实现选择性更新,没有值的不用更新
需求: 根据传⼊的⽤⼾对象属性来更新用户数据,可以使⽤标签来指定动态内容.
接⼝定义: 根据传⼊的用户 id 属性,修改其他不为 null 的属性
java代码
不使用<set>标签
使用<set>标签(这个标签会自动把我们后面的,给去除
1.6 <foreache>标签
对数组,集合进行遍历的时候使用这个标签.该标签有以下属性
• collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
• item:遍历时的每⼀个对象
• open:语句块开头的字符串
• close:语句块结束的字符串
• separator:每次遍历之间间隔的字符串
应用场景: 批量操作(批量更新,批量删除...)
mybatis中文网: 动态 SQL_MyBatis中文网
我们学习了这么多标签,发现还是很麻烦,有很多的冗余代码,因此我们引入了<sql>标签和<include>标签来进行使用
1.7 <sql>标签和<include>标签
Mybatis注解 VS xm
1.8 使用插件来生成xml文件
SpringBoot引入MybatisGenerator