今天在撸代码写了一个sql,在if标签判空时,Integer类型的一个字段传入的值为0时,怎么都不通过,但明明是有值的,于是各种找问题,最后发现是Integer类型传入的值为0时判空写!=''时,出现了问题,案例如下:
update user
set
num = #{num}
where id = 1
当传入的user
属性num
的值为0
时,mybatis
预编译上面的sql
为:update user where id = 1
;然后.....就报错了.......;
那么,这是什么原因呢?
mybatis在预编译sql时,是使用ognl表达式解析的,在对于Integer类型判断不等于''时,ognl是判断''的长度,而''的长度就是0;
源码:(s.length() == 0) ? 0.0 : Double.parseDouble( s )
所以if标签中的num!= ''就相当于num!= 0,所以当num的值为0时,if条件判断就会不通过。
1:在if标签中判断number
类型时,不需要判断'',只需判断null
就行;
2:可以换成基本数据类型,因为基本数据类型有默认值