MaBatis:使用foreach進行批量插入和批量刪除

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屬性:foreach傳入的對象參數。
具體說明:該參數必選。在不同情況下,該屬性的值是不一樣的,主要有一下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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章