where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。
而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。
如果 where 元素没有按正常套路出牌,
我们可以通过自定义 trim 元素来定制 where 元素的功能。
比如,和 where 元素等价的自定义 trim 元素为:
等于说 配合 trim有是一篇天地 两个事例
1
2
3
4
5
<!-- 配合 帮我们 格式 and 或者 or -->
<trimprefix="WHERE"prefixOverrides="AND |OR ">
...
</trim>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<where>
<iftest="empid != null">
and e.empid = #{empid}
</if>
<iftest="ename != null">
and e.ename = #{ename}
</if>
<iftest="egendar != null">
and e.egendar = #{egendar}
</if>
</where>
<!-- 模拟输出: where e.empid = #{empid} and e.ename = #{ename} and e.egendar = #{egendar} -->
<!-- 按照if的拼接应该是 : where and e.empid = #{empid} and e.ename = #{ename} and e.egendar = #{egendar} -->
<!-- 当然这是一个错误的 sql语句 where 后 and ? 这。。。。-->
<!-- 我们 where 标签就是 帮我们 格式化 规则 去掉 多余的 and 使他成为 正确的 sql -->
5.set 标签
这个可能用的最多的就是 update
这里,set 元素会动态前置 SET 关键字,
同时也会删掉无关的逗号,
因为用了条件语句之后很可能就会在生成的 SQL 语句的后面留下这些逗号。
(译者注:因为用的是“if”元素,若最后一个“if”没有匹配上而前面的匹配上,SQL 语句的最后就会有一个逗号遗留)
我们来看看 如何使用 强大的 trim 标签实现这个 set (set 就是 去掉多余的 逗号 并且前面帮我们拼接一个 set )
1
2
3
4
<trimprefix="SET"suffixOverrides=",">
...
</trim>
事例 update 配合 set 来试试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
update t_emp
<set>
<iftest="ename != null">
ename = #{ename},
</if>
<iftest="egendar != null">
egendar = #{egendar},
</if>
</set>
where empid = #{empid}
<!-- 模拟输出 update t_emp set ename = #{ename},egendar = #{egendar} where empid = #{empid} -->