Mybatis對於int型別的引數值為0的判斷
阿新 • • 發佈:2019-01-07
執行環境: Mybatis + Oracle
問題描述:狀態欄位statusFlag 使用的是number型別,對應的java 型別使用的是Integer,頁面上作為查詢條件,有個數值為0,這時候傳遞到後臺進行查詢的時候是篩選不出資料。
後臺Mybatis的判斷為
<if test="statusFlag != null and statusFlag != '' ">
AND STATUS_FLAG = #{statusFlag,jdbcType=DECIMAL}
</if>
問題原因就是當statusFlag 的值為0的時候,因為其資料型別為Integer,所以這個判斷是為false的,就是說int型別的判斷,Mybatis是認定0為''的,所以為false。
解決辦法是去掉空串的判斷
<if test="statusFlag != null">
AND STATUS_FLAG = #{statusFlag,jdbcType=DECIMAL}
</if>
這裡順便提一下(這個問題是第一次遇到),現在進行的專案使用的資料庫規範和我之前的開發習慣不一樣,規定了標識位欄位的資料庫型別統一使用的是number型別,還有一個也和我之前的習慣不一樣,就是日期型別使用Date型別。我的開發習慣是標識位使用varchar2()或者是char型別,而日期使用varchar2().這樣處理起來比較好處理,日期型別需要比較或者計算的時候可以使用Oracle自帶的函式進行處理。這樣至少會規避掉上面的問題,而且Date型別,使用springMVC的時候,作為查詢條件不會自動轉換,同樣可以避免。