错误发现
今天写mybatis遇到了一个问题——动态查询state=0的时候结果总是查询到全部记录,找了很久找不到原因,用postman传 1 时结果可用,就 0 不行,后来怀疑是参数是 0 的问题,于是把库里的 0 都改成了 2 ,成功。
错误原因
库里的STATE
字段是int
型的,和其他大多数字段不同,String属于引用类型,在mybatis中都是用not in {null, ''}
或STATE!=null and STATE!=''
来判断传入的参数是否为空;而当传入的是int
型的数字 0 时,mybatis会把它当成空字符串,所以动态sql没有拼接上。
错误示例,STATE是int型
<if test="STATE!=null and STATE!=''">
and news.STATE=#{STATE}
</if>
# 这两个的意思相同
<if test="STATE not in {null, ''}">
and news.STATE=#{STATE}
</if>
正确示例,删掉and STATE!=''
<if test="STATE!=null">
and news.STATE=#{STATE}
</if>