if判断Integer类型的值不等于‘‘导致的查询条件限制缺失

Posted 默慊$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了if判断Integer类型的值不等于‘‘导致的查询条件限制缺失相关的知识,希望对你有一定的参考价值。

项目场景:

一个普通的列表条件查询


问题描述:

传入Integer类型的状态(0/1: 启用/禁用),查询发现传入1(禁用)的时候查询没有问题,传入0(启用)时会查询出1(禁用)的数据


原因分析:

检查了半天,又通过调试,发现去掉对应xml文件中的<if>标签的 !='',问题就解决了,但是感觉很模糊,于是百度查了查,发现了一篇博客,里面讲的很详细:

https://blog.csdn.net/qq_30038111/article/details/82665763 ,mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于''时,

例如status!= '',OGNL会返回''的长度,因此表达式age != ''被当做age != 0来判断,所以当age为0时,if条件判断不通过


解决方案:

if条件判断Integer类型,没必要判断''的情况,只需判断null的情况,如果非要判断''的情况,那么要考虑到等于0的情况,即<if test="age != '' or age == 0">

以上是关于if判断Integer类型的值不等于‘‘导致的查询条件限制缺失的主要内容,如果未能解决你的问题,请参考以下文章

oracle语句,我想查询A表中的a字段下的值不等于B表中b的值的数据,

C#中如何判断数据库中int字段为Null

查询中mybatis的if判断里传入0

mybatis代码自动生成的where-if 查询Integer类型不生效问题

条件语句

thymleaf th:if判断某值不为空