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的值的数据,