什么是动态SQL
通过 mybatis 提供的各种标签方法实现动态拼接 sql
if标签
需求
根据客户名和级别查询客户
存在问题
有可能传入的名称或级别为空,可以使用 if 标签来进行判断
如果前一个条件没拼接,后面就会多一个and执行就会报错
Where标签
去掉第一个前 and
trim标签
去除 sql 语句中多余的 and 关键字,逗号,或者给 sql 语句前拼接 “where“、“set“ 以及 “values (“ 等前缀,或者添加“)“ 等后缀,可用于选择性插入、更新、删除或者条件查询等操作。
属性 | 描述 |
prefix | 给 sql 语句拼接的前缀 |
suffix | 给 sql 语句拼接的后缀 |
prefixOverrides | 去除 sql 语句前面的关键字或者字符,该关键字或者字符由 prefixOverrides 属性指定,假设该属性指定为 “AND”,当 sql 语句的开头为 “AND”,trim 标签将会去除该 “AND” |
suffixOverrides | 去除 sql 语句后面的关键字或者字符,该关键字或者字符由 suffixOverrides 属性指定 |
choose标签
有时我们不希望应用所有的条件语句,而是希望在众多选项中只选择一种情况。与Java中的switch语句类似,MyBatis提供了一个选择元素。
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author_name like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>
foreach标签
查询条件值为指定的值当中
给定的值可以以三种形式给出
数组
List
VO
创建Vo
测试
bind标签
bind元素允许从OGNL表达式中创建变量,并将其绑定到上下文。
<select id="selectBlogsLike" resultType="Blog"> <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" /> SELECT * FROM BLOG WHERE title LIKE #{pattern} </select>
Sql片段
Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sq l重用的目的。