标签:cep exception sql obj 查询 条件查询 bsp ops length
MyBatis条件查询对字段判断是否为空一般为:
<if test="testValue!=null and testValue != ‘‘"> and test_value = #{testValue} </if>
如果传入参数为Integer类型且值为0时,会把0转为空串
源码真实情况是:
MyBatis解析的所有sqlNode节点,针对if节点会交给IfSqlNode来处理,进过层层处理,最终都会调用OgnlOps.class类的doubleValue(Object value)方法
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).booleanValue() ? 1.0D : 0.0D; } else if (c == Character.class) { return (double)((Character)value).charValue(); } else { String s = stringValue(value, true); return s.length() == 0 ? 0.0D : Double.parseDouble(s); } } }
0和""都调用该方法返回的double值都为0.0,在进行比较。
处理方法:
<if test="testValue!=null and testValue!=‘‘ or 0 == testValue"> and test_value = #{testValue} </if> 或者 <if test="testValue!=null"> and test_value = #{testValue} </if>
标签:cep exception sql obj 查询 条件查询 bsp ops length
原文地址:https://www.cnblogs.com/lnlvinso/p/14802402.html