Mybatis Integer类型,值为0被认为是空字符串的解决办法

mybatis写查询时,正常是先判断是否为空,我们一般是这样写。

<if test="type != null and type != ''">  
     and type = #{type}   
</if>

如果不空null并且不是空字符串才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。因为Integer对象,为零则为空,对象判断用equals,传入参数放在括号里,"".equals(参数),不然值为空就会报空指针!你如果作为查询条件,一般查询中用int,可以避免null

Integer  i = 0;
i!=''。
mybatis中会返回true。也就是说,mybatis将i==0的值也认定为空字符串。

正常来说,0不为空也不是空字符串。所以,针对这个问题,我的解决办法是:如果类型为Integer类型,我就去掉 != ”的判断,只判断!=null即可。

该问题的根源还是来自编码的不规范,只有String类型才需要判断是否!='',其他类型完全没有这个必要。

这里有必要再提一个“坑”,如果你有类似于String str ="A"; <if test="str!= null and str == 'A'">这样的写法时,你要小心了。因为单引号内如果为单个字符时,如果你看过Mybatis的源码,就会MyBatis的表达式是用OGNL处理的了,而OGNL将会识别为Java 中的 char类型,显然String 类型与char类型做==运算会返回false,从而导致表达式不成立。解决方法很简单,修改为<if test='str!= null and str == "A"'>即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值