场景再现:
在做查询时,有一个根据状态查询过滤,状态0为失效,1为有效,但查询出来的结果却是失效有效的都有。
查看sql日志,发现判断状态的条件没有生效导致,仔细看下sql代码,发现问题出在判断上:
当传过来的Integer类型的属性status值为0时,该if方法不执行
<if test="query.status != null and query.status != '' ">
ss.state = #{query.status}
</if>
原因分析:mybatis中数值型0会被判为空字符串,所以对于这个问题,可以直接去掉 != ''的判断,只判断!=null即可解决!
<if test="query.status != null ">
ss.state = #{query.status}
</if>