首頁 > 軟體

mybatis if test 不為空字串且不為null的問題

2022-03-12 13:00:11

if test不為空字串且不為null

在mybatis中if test 

判斷不為空字串和null的時候,報了sql 語法錯誤

xml檔案:

WHERE enable =1
<if test="keyword != null AND keyword != ''">
        AND ( mac_id = #{keyword} )
        OR ( user_id = #{keyword} )
 </if>

postman工具報錯如下:

原因:

if 判斷中, 出現字母大小寫錯誤, 不符合mybatis 語法規範

在mybatis中, if test 語法

1 判斷不為null

WHERE 1=1
<if test="keyword != null ">
        AND  user_id = #{keyword} 
</if>

2 判斷不為空字串

WHERE 1=1
<if test="keyword != '' ">
        AND  user_id = #{keyword} 
</if>

3 判斷不為null 且 不為空字串

WHERE 1=1
<if test="keyword != null and keyword != ''">
        AND  user_id = #{keyword} 
</if>

Controller層 —> 對應xml 檔案

我們在獲取列表時,通常會根據關鍵詞進行精確或模糊查詢,就會對關鍵詞進行非空或者非null的判斷。如下:

Controller層請求引數keyword請求引數預設值Dao層Xml 檔案
@RequestParam(value = “keyword”, required = false) String keywordnullif test="keyword != null "
@RequestParam(value = “keyword”, required = false, defaultValue = “”) String keyword空字串if test="keyword != ‘’ "
/不清楚預設值都可以if test=“keyword != null and keyword != ‘’”
引數預設值Dao層Xml 檔案
從其他渠道的獲取的資料或關鍵詞不清楚預設值if test=“keyword != null and keyword != ‘’”

mybatis把0當做空字串

在開發中,一般在sqlmap中都會判斷引數是否為null,以及是否為空字串

當引數為Int型別 0時,myBatis自動把0定義為空字串“”

我們在可能入參為0的地方多加一個判斷

 <if test="authorizeAmount != null and ''!= authorizeAmount or authorizeAmount==0">
            ,a.AUTHORIZE_AMOUNT = #{authorizeAmount,jdbcType=VARCHAR}
        </if>

這是一個比較容易粗心的地方,出問題也不容易排查,記錄下來提醒自己!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com