MaBatis:使用foreach進行批量插入和批量刪除
阿新 • • 發佈:2018-12-18
MaBatis:使用foreach進行批量插入和批量刪除
foreach可以在SQL語句中通過拼接的方式進行集合迭代。foreach元素的屬性主要有collection,item,index,separator,open,close。
1.item屬性:表示迴圈體中的具體物件,即集合中每一個元素進行迭代時的別名。
具體說明:item支援屬性的點路徑訪問,如item.age,item.info.details。在list和陣列中是其中的物件,在map中是value。該引數為必選。
2.index屬性:指定一個名字,用於表示在迭代過程中,每次迭代到的位置。
具體說明:在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。
3.separator屬性:表示在每次進行迭代之間以什麼符號作為分隔符。
具體說明:例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該引數可選。
4.open屬性:foreach程式碼的開始符號,表示該語句以什麼開始。
具體說明:一般是"(“和close=”)"合用。常用在in(),values()時。該引數可選。
5.close屬性:foreach程式碼的結束符號,表示該語句以什麼結束。
具體說明:一般是")“和open=”("合用。常用在in(),values()時。該引數可選。
6.collection屬性
具體說明:該引數必選。在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
a. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list ;
b. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array ;
c. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map。實際上在傳入引數的時候,框架也會把它封裝成一個Map的,map的key就是引數名,這個時候collection屬性值就是傳入的List或array物件在自己封裝的map裡面的key。
使用foreach進行批量插入的對映檔案示範如下:
<insert id="insertUserList">
insert into t_user (user_name,sex) values
<!-- 動態SQL之foreach的用法 -->
<!--
collection="users" 用於指定迴圈集合的名稱,如果介面中並未指定引數別名,那麼預設就是list
item="u" 用於指定每次迴圈後的物件的別名
separator="," 用於指定每次迴圈後之間的分割符
-->
<foreach collection="users" item="user" separator=",">
(#{user.userName},#{user.sex})
</foreach>
</insert>
使用foreach進行批量刪除的對映檔案示範如下:
<delete id="batchDeleteUser">
delete from t_user where id in
(
<foreach collection="ids" item="id" separator=",">
#{id}
</foreach>
)
</delete>
當然也可以使用下述的格式:
<!-- open表示該語句以什麼開始,close表示以什麼結束 -->
<delete id="deleteUserByIdList">
delete from t_user where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>