0%

MyBatis动态SQL

什么是动态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提供了一个选择元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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表达式中创建变量,并将其绑定到上下文。

1
2
3
4
5
<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重用的目的。

↓赏一个鸡腿... 要不,半个也行↓