mybatis-plus在xml中传入参数为0时查询条件失效
1.异常说明:
1)用Integer接收param.status为0 的数据时, 非0 的数据也查询出来引发的这个问题
2)xml 里where条件
<if test="vo.status !=null and vo.status !=''">
AND tatus = #{vo.status}
</if>
2.原理:
mapper接口传入的参数类型为Integer值为0时,mybaits 在进行 param.status !=''的时候会默认""和0 都转换成double进行比较 都是0.0, 导致该where条件失效
感兴趣的同学可以求翻翻源码:
public static double doubleValue(Object value) throws NumberFormatException {
if (value == null) {
return 0.0D;
} else {
Class c = value.getClass();
if (c.getSuperclass() == Number.class) {
return ((Number)value).doubleValue();
} else if (c == Boolean.class) {
return (Boolean)value ? 1.0D : 0.0D;
} else if (c == Character.class) {
return (double)(Character)value;
} else {
//这里将''改成了0.0D
String s = stringValue(value, true);
return s.length() == 0 ? 0.0D : Double.parseDouble(s);
}
}
}
3.解决办法:
1) 不用Integer接收,使用String类型接收
2)去掉【参数!=’‘】 的非空判断
备注:如果String类型需要判断!=0,则需要写成 xxx != ‘0’.toString()