问题:if标签的test比较值相等 不匹配的情况
情况1:
我们用if的test判断一个条件不为空时的写法:
<if test="status != null and status != '' ">
status = #{status}
</if>
大多数情况都是这样的写法,也是没有问题的,但是如果我们要根据参数值同具体值比较时,写法如下:
<if test="status != null and status == 1 ">
status = #{status}
</if>
此时执行程序,入参status=1,你会发现不会进入到status = #{status},也就是程序判断是false,if-test没有进入,sql中也就不会拼上status =xxx的条件了。
这是为什么呢?如果if-test要比较具体值,需要关注引号,如果是比较值,此时test后用的引号是“单引号”,test内部比较值用的是“双引号”,写法如下:
<if test='status != null and status == "1" '>
status = #{status}
</if>
情况2:
如果入参是一个int类型的参数,并且值为0也是一种业务含义,此时按照下面的写法,也不会进入到if-test内部,因为int类型为0,mybatis认为是空
<if test="status != null and status != '' ">
status = #{status}
</if>
修改:
<if test='status != null and status != '' or status == "0" '>
status = #{status}
</if>