一、问题
1、通常在对一个字段做非空判断时采取的方式如下,执行结果是符合预期的
<if test="name != null and name != ''">
AND name = #{name}
</if>
2、但是当这个字段的类型为数字且值为0时,会发现语句没有连接,判断失败
<if test="status != null and status != ''">
AND status = #{status}
</if>
二、说明
当 一个数值 和 一个字符 进行比较时,都会被转成 Double 类型再进行比较
// 字符串转换为 Double 的逻辑
return s.length() == 0 ? 0.0D : Double.parseDouble(s);
此时 0 和 '' 都变成 0.0 了,所以 0 != '' 的结果为 false 的,因为它们是相等的
三、方案
<if test="status != null">
AND status = #{status}
</if>