1. 程式人生 > 其它 >Mybatis中Integer型別的值為0時,會被當做空的問題

Mybatis中Integer型別的值為0時,會被當做空的問題

技術標籤:Mybatismybatis

在這裡插入圖片描述

使用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>