mybatis中xml字段空判斷及模糊查詢


由於業務特殊的查詢需求,需要下面的這種查詢,一直感覺模糊不清,本地測試一下順便做個總結


貼一段xml代碼,如下:

1 <if test="receivedName != null and receivedName != '' ">
2     AND receivedName = #{receivedName}
3 </if>
4 <if test="receivedName == null">
5     AND receivedName is null
6 </if>

注意下面幾點:

1、如果java代碼中有receiveName這個參數且receiveName="jack",那么這種情況是滿足上面第一種情況的,到mybatis中,轉換sql語句就是“select * from table where receivedName="jack";”;
2、如果java代碼中有receivedName這個字段且receivedName="",那么這種情況是不滿足上面的兩個條件的,到mybatis中,轉換sql語句就是“select * from table where 1=1;”
3、如果java代碼中沒有receivedName這個參數,這里是滿足 "receivedName == null" 這種情況的,到mybatis中,轉換為sql語句就是“select * from table where receivedName is null;”

 

這里要注意,不管你的查詢參數有幾個,如果你傳遞的參數中不包含receiveName這個參數,那么,默認的查詢sql至少會有一個條件是 “receivedName is null”,因為這個默認的條件,所以今天上午感覺數據查詢結果像見鬼了一樣,其實也是自己考慮不周全導致。

再補充一個模糊查詢的知識點,平時留意一下。


對於要模糊查詢的字段,我這里有兩種處理方法:
第一種:在組裝查詢參數的時候,處理,如果參數是存在map中,那么處理方式是map.put("title","%"+dto.getTitle().trim()+"%"),相當於title參數直接帶有模糊字符,xml中title LIKE #{title}就行。
第二種:在組裝查詢參數時,不做處理,在xml中處理,在xml中有兩種寫法,分別是下面的兩種,經過實驗,這兩種都是可行的,第二種寫法顯得比較規范,使用了mysql的函數concat(a,b)。

(一):

1 <if test="maiDepartmentName != null">
2         AND maiDepartmentName LIKE '%' #{maiDepartmentName} '%'
3 </if>

 

(二):

1 <if test="title != null">
2     AND  title LIKE CONCAT(CONCAT('%',#{title}),'%') 3 </if>

 

以上內容都是本人在工作的總結,難免會有錯誤,大家發現歡迎指正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM