Mybatis 用 if 条件判断 `test="num != null and num != '' "` 当 num 为 0 时判断为 fasle
在做一个删除操作时,需要更新关联表的统计记录数,当所有记录都被删除,即记录数 num 为 0 时,报错 SQLSyntaxErrorException
,后面的的 sql 显示为 update table_name where id = 1
,缺少了 num 字段设置。
调试统计 num = 0 参数正常传递进入到 Mapper。查看执行更新操作的 sql:
update table_name
<trim prefix="SET" suffixOverrides=",">
...
<if test="num != null and num != ''">num = #{num},</if>
...
</trim>
where id = #{id}
...
有个比较可疑的点就是 num != ''
判断,因为 num 是 Integer 类型,如果作为正常 Java 语句执行是会报错的:
Main.java:3: error: bad operand types for binary operator '!='
System.out.println(0 != "");
^
first type: int
second type: String
1 error
但是在 Mybatis 里面没有报错,测试去除掉 num != ''
判断可以解决问题。
百度了解到,Mybatis test 判断条件中如果是数字类型(Integer、Float、Double)与字符串比较,是会统一转化为 double 进行比较的,值都会变成 0.0。这就是 test 判断为 false 的原因。