Mybatis if标签中Integer类型传入的值为0时判空不通过问题

一. 问题描述

今天在撸代码写了一个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:可以换成基本数据类型,因为基本数据类型有默认值


   

你可能感兴趣的:(问题实录,linq,蓝桥杯,microsoft)