Mybatis的if标签判断空字符串问题

文章讲述了在Mybatis中,由于将status条件设置为`status!!=`导致当status为0时动态SQL失效的问题,原因是Integer类型的判断被OGNL解释为与0比较。作者给出了避免此类问题的两个经验教训。
摘要由CSDN通过智能技术生成
1.问题描述

图1中的查询,status条件没有起作用,图2为执行的sql语句,图3为status的枚举类

图1

图2

图3

2.原因分析

考虑到配置文件不需要编译,为了防止手动书写带来的一些问题,就直接把别的地方的copy过来了,原来的是string类型的,属性 != '' 

通过Mybatis源码的分析知道:

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

源码:

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

3.经验教训

3.1 Integer等数字类型的,如果不需要过滤掉0的情况下,写条件判断的时候,不要带上 != '',如果带上 ,需要加上 or 属性 == 0 ;

3.2 出现类似某个条件没有起作用时,不妨看下xml文件

参考文献:

(143条消息) Mybatis 判断 Integer类型,值为0动态SQL不生效_mybatis判断integer为0_Linda033的博客-CSDN博客

(143条消息) Mybatis if判断Integer类型的值不等于''引发的问题(!=''等价于!=0)_mybatis if 不等于_p7+的博客-CSDN博客

 

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值