動態sql之各種標籤的使用以及詳細配置

動態sql

在一個複雜得業務邏輯的背景下,比如一個電商網站

​ 在一個手機表中,可能需要按照品牌,型號,顏色,內存等多個屬性對手機表進行查找,如果對一個屬性寫一個查詢方法,那麼代碼將會非常複雜,所以我們思考:有沒有一種可能只寫一種方法就可以查詢出來業務。那麼他來了-----動態SQL

一、Where和if標籤

需求:查詢user表的數據。多個條件無腦組合

第一步:定義接口,接口中添加查詢方法

在這裏插入圖片描述

**注意:**定義方法時要考慮返回值與輸入參數

第二步:映射文件中添加方法實現配置
在這裏插入圖片描述

使用if標籤對條件做出判斷
<if test="id!=null">
	id=#{id}
</if>
If(id!=null){ id=#{id}}

上述解決方案中存在where 1=1的無意義sql,使用Where標籤解決1=1的問題

在這裏插入圖片描述

注意:if標籤做條件判斷,test屬性中添加判斷添加,多條件時使用and拼接where標籤幫我們解決了1=1問題的同時,還可以幫助我們去掉第一個and

二、Set標籤

需求:修改person信息,傳什麼改什麼

第一步:接口中添加修改方法

在這裏插入圖片描述

第二步:映射文件中添加實現

在這裏插入圖片描述

**注意:**set標籤可以幫助我們解決最後一個逗號的問題

三、trim標籤

3.1重寫set標籤

在這裏插入圖片描述

**prefix:**前綴,在執行trim標籤內語句時,在前面拼接的值(set)

**SuffixOverrides:**忽略後綴,在執行trim標籤內語句時,在最後忽略的值(,)

3.2重寫Where標籤

在這裏插入圖片描述

PrefixOverrides:忽略前綴(and/or)

Suffix:後綴(加上where)

四、choose標籤

需求:如果有用戶的id,使用id查詢,如果沒有id,看是否有那麼,按name模糊查詢,如果都沒有,按照地址模糊查,如果地址沒有,查詢全部

第一步:定義接口方法

在這裏插入圖片描述

第二步:映射文件中添加方法實現

在這裏插入圖片描述

注意:

Choose:表示單選,標籤下的條件只選擇一個執行
Choose相當於switch語句
When標籤相當於case語句
Otherwise標籤相當於default語句

五、foreach標籤

foreach標籤主要是用來做數據的循環遍歷

例如:select * from person where id in(4,5,6)在這樣的語句中,需要根據一個集合或者一個數組傳入的參數進行查詢。

Case 1:使用集合傳入用戶需要查詢的值

第一步:接口中定義方法
在這裏插入圖片描述
使用集合接收傳過來的id串

第二步:映射文件中添加方法的實現配置
在這裏插入圖片描述
​ 注意:

Foreach標籤:用於遍歷集合/數組

Collection屬性:代表要遍歷的集合元素,如果遍歷的是集合,屬性值可以是collection,也可以是list

Open屬性:代表語句的開始部分(前綴)

Close屬性:代表結束部分(後綴)

Item屬性:代表遍歷集合的每個元素,生成的變量名,取名要做到見名知意。

Separator屬性:代表分隔符

第三步:測試代碼
在這裏插入圖片描述

Case 2:使用數組傳入用戶查詢需要的id

第一步:接口方法
在這裏插入圖片描述
第二步:映射文件
在這裏插入圖片描述
注意:使用foreach遍歷 數組時,collection屬性值爲array

case 3:pojo對象集合屬性傳入用戶需要查詢的id

第一步:創建一個查詢對象QueryVO(補充查詢條件)

在這裏插入圖片描述

第二步:定義接口方法

在這裏插入圖片描述

第三步:添加映射

在這裏插入圖片描述

​ 注意:

​ 當foreach遍歷的是pojo的集合屬性或者數組屬性時,collection的屬性值屬性的名稱

第四步:測試代碼

第三步:添加映射**

[外鏈圖片轉存中…(img-xUKhckcg-1593526500513)]

​ 注意:

​ 當foreach遍歷的是pojo的集合屬性或者數組屬性時,collection的屬性值屬性的名稱

第四步:測試代碼在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章