MyBatis之foreach標簽的用法及多種循環(huán)問題
更新時間:2023年11月04日 10:39:58 作者:TM_enn
這篇文章主要介紹了MyBatis之foreach標簽的用法及多種循環(huán)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
參數(shù)解釋
foreach 的主要作用在構建 in 條件中,它可以在 sql 語句中進行迭代一個集合。
foreach 元素的屬性主要有 collection,item,separator,index,open,close。
| 屬性 | 描述 |
|---|---|
| collection | 指定要遍歷的集合。表示傳入過來的參數(shù)的數(shù)據(jù)類型。該屬性是必須指定的,要做 foreach 的對象。 |
| index | 索引,index 指定一個名字,用于表示在迭代過程中,每次迭代到的位置。遍歷 list 的時候 index 就是索引,遍歷 map 的時候 index 表示的就是 map 的 key,item 就是 map 的值。 |
| item | 表示本次迭代獲取的元素,若collection為List、Set或者數(shù)組,則表示其中的元素;若collection為map,則代表key-value的value,該參數(shù)為必選 |
| open | 表示該語句以什么開始,最常用的是左括弧’(’,注意:mybatis會將該字符拼接到整體的sql語句之前,并且只拼接一次,該參數(shù)為可選項 |
| separator | 表示在每次進行迭代之間以什么符號作為分隔符。select * from tab where id in(1,2,3)相當于1,2,3之間的"," |
| close | 表示該語句以什么結束,最常用的是右括弧’)’,注意:mybatis會將該字符拼接到整體的sql語句之后,該參數(shù)為可選項 |
查詢
<!--第一種-->
<select id="getList" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="ids != null and ids.size > 0">
AND id IN
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!--第二種-->
<select id="getList" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="ids != null and ids.size > 0">
AND
<foreach collection="ids" item="item" open="id IN(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!--如果入?yún)⑹且粋€逗號分隔的字符串比如"1,2,3,4",還可以簡化寫法,不用轉成List,直接以字符串的形式傳入即可-->
<select id="getList" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="strIds != null and strIds != ''">
AND id IN
<foreach collection="strIds.split(',')" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
批量更新
<!--第一種-->
<update id="updateList">
<foreach collection="deviceList" item="item" separator=";">
UPDATE device
SET
name = #{item.name},
no = #{item.no}
WHERE
id = #{item.id}
</foreach>
</update>
<!--第二種-->
<update id="updateList">
UPDATE device
SET
del_flag = 1
WHERE 1=1
AND id IN
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
批量插入
<!--第一種-->
<insert id="insertList">
INSERT INTO
device
(id,name,no)
VALUES
<foreach collection="deviceList" item="item" separator=",">
( #{item.id}, #{item.name}, #{item.no} )
</foreach>
</insert>
<!--第二種-->
<insert id="insertList">
<foreach collection="deviceList" item="item" separator=";">
INSERT INTO
device
(id,name,no)
VALUES
( #{item.id}, #{item.name},#{item.no} )
</foreach>
</insert>
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java源碼解析阻塞隊列ArrayBlockingQueue功能簡介
今天小編就為大家分享一篇關于Java源碼解析阻塞隊列ArrayBlockingQueue功能簡介,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Eclipse添加xml文件提示及Hibernate配置學習
文件提示功能在開發(fā)過程中很實用的,本文實現(xiàn)了一個Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對你有所幫助2013-01-01
SpringBoot中MockMVC單元測試的實現(xiàn)
Mock是一種用于模擬和替換類的對象的方法,以便在單元測試中獨立于外部資源進行測試,本文主要介紹了SpringBoot中MockMVC單元測試的實現(xiàn),具有應該的參考價值,感興趣的可以了解一下2024-02-02
一文詳解Elasticsearch和MySQL之間的數(shù)據(jù)同步問題
Elasticsearch中的數(shù)據(jù)是來自于Mysql數(shù)據(jù)庫的,因此當數(shù)據(jù)庫中的數(shù)據(jù)進行增刪改后,Elasticsearch中的數(shù)據(jù),索引也必須跟著做出改變。本文主要來和大家探討一下Elasticsearch和MySQL之間的數(shù)據(jù)同步問題,感興趣的可以了解一下2023-04-04

