动态SQL
- MyBatis通过标签的配合使用,可实现如下功能
- 常用标签
- if
- where
- choose
- foreach
- set
- trim
if标签
- 动态SQL技术中最常用的标签之一
- 类似于Java中的if语句
<if test = "条件判断,返回true或false" >
SQL语句
</if>
where标签
- 简化SQL语句中where子句处理
- 智能处理and、or等关键字
<where>
<if test="条件判断">
SQL语句
</if>
…
</where>
choose(when、otherwise)标签
- 是一个组合标签,通常与when、otherwise标签配合使用
- 类似于Java中switch语句
<choose>
<when test="条件判断,返回true或false">
</when>
<when test="条件判断,返回true或false">
</when>
...
<otherwise>
</otherwise>
</choose>
foreach标签
<foreach collection = "参数名称"
item = "元素别名"
open = "("
separator = ","
close = ")"
index = "当前元素位置下标" >
#{元素别名}
</foreach>
- open:起始位置的拼接字符
- separator:元素之间的连接符
- close:结束位置的拼接字符
set标签
- 简化SQL语句中set子句处理
- 智能忽略更新语句尾部多出来的逗号
- 用于Update修改语句中
<set>
<if test="条件判断">
SQL语句
</if>
…
</set>
trim标签
- 动态地为SQL语句添加前后缀
- 智能忽略标签前后多余的and、or或逗号等字符
<trim prefix = "前缀"
suffix = "后缀"
prefixOverrides = "忽略前缀"
suffixOverrides = "忽略后缀" >
…
</trim>
- 示例1:
- 使用trim标签替换前面示例中的where标签
- 实现示例中相同的功能
<select id="selectList" resultType="SysUser">
select * from t_sys_user
<trim prefix="where" prefixOverrides="and|or">
<if test="roleId != null">
and roleId = #{roleId}
</if>
…
</trim>
</select>
- 示例2:
- 使用trim标签替换前面示例中的set标签
- 实现示例中相同的功能
<update id="update" parameterType="SysUser">
update t_sys_user
<trim prefix="set" suffixOverrides="," suffix= " where id = #{id}" >
<if test=“account != null">
and account = #{account},
</if>
…
</trim>
</update>