巧妙mybatis避免Where 空条件的尴尬

我就废话不多说了,大家还是直接看代码吧~

1
2
3
4
5
6
7
<select id="findActiveBlogLike" resultType="Blog">
 SELECT * FROM BLOG
 WHERE
 <if test="state != null">
 state = #{state}
 </if>
</select>

如果state参数为空时,最终生成SQL语句为

SELECT * FROM BLOG

WHERE

执行会出错,当然,你可以在where 后加一个1=1,改成

1
2
3
4
5
6
7
<select id="findActiveBlogLike" resultType="Blog">
 SELECT * FROM BLOG
 WHERE 1=1
 <if test="state != null">
 and state = #{state}
 </if>
</select>

但是这个做法不太“环保”(毕竟引入了一个垃圾条件),其实只要改成<where>...</where>即可

1
2
3
4
5
6
7
8
<select id="findActiveBlogLike" resultType="Blog">
 SELECT * FROM BLOG
 <where>
  <if test="state != null">
   and state = #{state}
  </if>
 </where>
</select>
原文地址:https://www.cnblogs.com/roak/p/14892378.html