js中有默认的隐试转换
数字和字符串隐试转换规则 | 任何非零的数为true,0为false。 任何非空字符串为 true,空字符串为false。 |
如果想非自动隐试转换判断可以使用=== 或者 !==替代 ==和!==
如:
('' == 0) //true
('' === 0) //false
MyBatis的表达式是用OGNL处理的
OGNL对于boolean的定义和JavaScript有点像,即 '' == 0 == false
如我们经常使用到的MyBatis动态sql表达式:
<if test="x!= null and x!=''">
and x= #{x}
</if>
在对象为Number类型(包括浮点)时,值为0(0.00)将被解析为false;
出现此问题的根源在于编码的规范问题,只有String类型才需要判断是否 x!=''
参考: