Mybatis空字符串判断问题

又出现了,入参param1=1的时候筛选结果正确,param1=0的时候筛选失效的问题,真的是不管写几次都无法就这个bug和Mybatis和解……

https://www.jb51.net/article/240595.htmhttps://www.jb51.net/article/240595.htm参考以上文章

非String类型使用obj != null即可

String类型通常要加一个空串的判断obj != null and obj != '',如果入参类型对应的判断方式使用正确,不会有问题。

入参是一个数字类型,如Long,但是在判空时使用obj != null and obj != '',这种做法本身就是错误的,你会发现,当Long值传0的时候,obj == ''是成立的,就导致了完全出乎预料的结果。其中mybatis的处理方式是,当发现你用一个数字类型的对象和串比较的时候,他会将串转换成数字类型,非空串的时候是没有问题的,空串的时候,mybatis将空串转换成数字0,这就是mybatis做的实现,问题根源是对非字符串类型做了空串判断的错误操作。

最后的结论就是,数字类型的对象不要使用空串判断表达式obj != ''。

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

在param1为整型的前提下,如果传参为0,Mybatis会认为0和空字符串相等,从而不执行该if下的语句,导致错误,应改为:

<if test="param1 != null">
    and param_1 = #{param1}
</if>

非String类型不判断 !='' 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值