mybatis if test 不為空字符串且不為null的問題
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 判斷中, 出現(xiàn)字母大小寫錯誤, 不符合mybatis 語法規(guī)范
在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層 —> 對應(yīng)xml 文件
我們在獲取列表時,通常會根據(jù)關(guān)鍵詞進(jìn)行精確或模糊查詢,就會對關(guān)鍵詞進(jìn)行非空或者非null的判斷。如下:
Controller層請求參數(shù)keyword | 請求參數(shù)默認(rèn)值 | Dao層Xml 文件 |
---|---|---|
@RequestParam(value = “keyword”, required = false) String keyword | null | if test="keyword != null " |
@RequestParam(value = “keyword”, required = false, defaultValue = “”) String keyword | 空字符串 | if test="keyword != ‘’ " |
/ | 不清楚默認(rèn)值 | 都可以if test=“keyword != null and keyword != ‘’” |
參數(shù) | 默認(rèn)值 | Dao層Xml 文件 |
---|---|---|
從其他渠道的獲取的數(shù)據(jù)或關(guān)鍵詞 | 不清楚默認(rèn)值 | if test=“keyword != null and keyword != ‘’” |
mybatis把0當(dāng)做空字符串
在開發(fā)中,一般在sqlmap中都會判斷參數(shù)是否為null,以及是否為空字符串
當(dāng)參數(shù)為Int類型 0時,myBatis自動把0定義為空字符串“”
我們在可能入?yún)?的地方多加一個判斷
?<if test="authorizeAmount != null and ''!= authorizeAmount or authorizeAmount==0"> ? ? ? ? ? ? ,a.AUTHORIZE_AMOUNT = #{authorizeAmount,jdbcType=VARCHAR} ? ? ? ? </if>
這是一個比較容易粗心的地方,出問題也不容易排查,記錄下來提醒自己!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot actuator應(yīng)用后臺監(jiān)控實現(xiàn)
這篇文章主要介紹了Springboot actuator應(yīng)用后臺監(jiān)控實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04Java類之間的關(guān)系圖_動力節(jié)點Java學(xué)院整理
在Java以及其他的面向?qū)ο笤O(shè)計模式中,類與類之間主要有6種關(guān)系,他們分別是:依賴、關(guān)聯(lián)、聚合、組合、繼承、實現(xiàn)。他們的耦合度依次增強(qiáng),有興趣的可以了解一下2017-08-08