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”来使其生效。

原文地址:https://www.cnblogs.com/guyaoblog/p/14234239.html