mybatis if标签test比较值不匹配的问题解决

问题: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>