Mybatis 判断 Integer类型,值为0动态SQL不生效

记一次:Mybatis 判断 Integer类型,值为0动态SQL不生效

场景是这样的:

select * from tableName
where 1=1
  <if test="status!=null and status!=''">and `status` = #{status}</if>

我的status是这样定义的:0-待审核,1-已通过,2-已驳回,3-未认证
之前一直没发现这个BUG是因为: 1-待审核,2-已通过,3-已驳回,4-未认证
只有当status=0的时候这个动态SQL才不生效!!!好奇怪!


那这就是这个0在作怪了。

通过Mybatis源码的分析知道:
mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于’ '时,例如我写的那样 status != ’ ',OGNL会返回 ’ ’ 的长度,

源码:
在这里插入图片描述

故 表达式status != ’ '会被当做status != 0来判断,所以当status=0时,if条件判断不通过,动态SQL也就不生效啦。

我们只需要将status!=’ '条件去掉就可以解决上面这个问题。至于代码中的业务逻辑,看看能不能在service中处理吧。。。


翻到了一篇比较好的博客解释,分享一下:
Mybatis if判断Integer类型的值不等于’‘引发的问题(!=’'等价于!=0)

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值