Mybatis中Integer型別的值為0時,會被當做空的問題
阿新 • • 發佈:2021-02-20
使用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>