问题场景
今天在做新项目的时候,遇到了一个当传入的参数为0,Mybatis的if标签判断出错的问题
<if test="positionHot != null and positionHot != ''>
position_hot = #{positionHot},
</if>
当positionHot=0的时候,正常来说是应该可以进到if里面的,事实却是没进去,查了些资料之后发现是:
在使用if标签进行字符串和数字的比较时,会把字符串转化成数字来进行比较,也就是会把’'转换成0.0D,源码是这样的:
return s.length() == 0 ? 0.0D : Double.parseDouble(s);
解决方案
所以 0 == 0.0D 相等 ,就进不去if里面了,改成下面这样就可以了
<if test="positionHot != null and positionHot != '' or positionHot == 0">
position_hot = #{positionHot},
</if>