项目场景:
一个普通的列表条件查询
问题描述:
传入
Integer类型的状态(0/1: 启用/禁用),查询发现传入1(禁用)的时候查询没有问题,传入0(启用)时会查询出1(禁用)的数据
原因分析:
检查了半天,又通过调试,发现去掉对应xml文件中的<if>标签的 !='',问题就解决了,但是感觉很模糊,于是百度查了查,发现了一篇博客,里面讲的很详细:
Mybatis if判断Integer类型的值不等于''引发的问题(!=''等价于!=0)_p7+的博客-CSDN博客 ,mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于''时,
例如status!= '',OGNL会返回''的长度,因此表达式age != ''被当做age != 0来判断,所以当age为0时,if条件判断不通过
解决方案:
if
条件判断Integer类型,没必要判断''
的情况,只需判断null
的情况,如果非要判断''
的情况,那么要考虑到等于0
的情况,即<if test="age != '' or age == 0">