使用Mybatis查询数据的时候,有个字段tinyint(1)类型,用来做状态判断的,本来取值是可以为0的,在mybatis中的条件里原来是这样写的:
<if test="draft != null and draft !=''">
and article.draft = #{draft,jdbcType=INTEGER}
</if>
<if test="privacy != null and privacy !=''">
and article.privacy = #{privacy,jdbcType=INTEGER}
</if>
<if test="top != null and top !=''">
and article.top = #{top,jdbcType=INTEGER}
</if>
习惯这样写,非空非null
但是查询sql却并没有把条件拼进去,原因是mybatis源码里在判断Integer类型时候,默认把0值当做空值来处理了
解决方法是不进行等于‘’
空字符的判断
<if test="top != null">
and article.top = #{top,jdbcType=INTEGER}
</if>
如果实在需要为空字符的判断,则必须加上等于0 的判断
<if test="top != null and top !='' or top==0">
and article.top = #{top,jdbcType=INTEGER}
</if>