mybatis组建sql过程中判定数字0和空字符串相等的问题
最近做一个功能的时候发现传递参数值为数字0的参数到mybatis中时,if标签未生效。传递参数为“status”==0;if标签为<if test="status != '' and status != null">...</if> ,通过跟踪代码发现,mybatis在OgnlOps中调用了CompareWithConversion方法,如下:
该方法中调用了doubleValue()去获取传入的数字0和test中空字符串‘’的double值,都为0.0,如下
这里传入参数为空串,长度为0,所以也返回了0.0,所以mybatis中数字0和‘’相等,if标签test不通过导致失效。
小知识点:
test标签中写的是status != '',这里''在进行比对的时候mybatis将其通过Ognl的方法转换为了"",如下:
具体过程太过复杂,暂不讨论。
解决方法:
可以将数字0改为字符串“0”来使其生效。