出现问题:在做项目的时,写动态sql语句的一个if时,当`query.isDisk!=’ ‘判断条件isDisk为0时,sql拼接就不会生效,查阅资料后,是因为mybatis在传递Integer的参数并且值为0时,会将表达式的值视作为空字符串。也就是说当控制层的query.isDisk=0传到数据操作层的动态sql的时候已经变成了query.isDisk=’ ’
<if test="query.isDisk!=null and query.isDisk!='' ">
<if test="query.isDisk==1">
AND t1.is_disk IN (1,2)
</if>
<if test="query.isDisk==0">
AND t1.is_disk = #{query.isDisk}
</if>
</if >
解决方法:在判断的表达式中若被判断的数据是Integer类型,是不会出现'query.isDisk!='' '
这样的情况,只有传递值是String时才会需要query.isDisk!=''
这样的判空条件。那么这样 将判空的条件里去除and query.tel !=''
即可
<if test="query.isDisk!=null">
<if test="query.isDisk==1">
AND t1.is_disk IN (1,2)
</if>
<if test="query.isDisk==0">
AND t1.is_disk = #{query.isDisk}
</if>
</if >