MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問(wèn)題
參數(shù)解釋
foreach 的主要作用在構(gòu)建 in 條件中,它可以在 sql 語(yǔ)句中進(jìn)行迭代一個(gè)集合。
foreach 元素的屬性主要有 collection,item,separator,index,open,close。
屬性 | 描述 |
---|---|
collection | 指定要遍歷的集合。表示傳入過(guò)來(lái)的參數(shù)的數(shù)據(jù)類型。該屬性是必須指定的,要做 foreach 的對(duì)象。 |
index | 索引,index 指定一個(gè)名字,用于表示在迭代過(guò)程中,每次迭代到的位置。遍歷 list 的時(shí)候 index 就是索引,遍歷 map 的時(shí)候 index 表示的就是 map 的 key,item 就是 map 的值。 |
item | 表示本次迭代獲取的元素,若collection為L(zhǎng)ist、Set或者數(shù)組,則表示其中的元素;若collection為map,則代表key-value的value,該參數(shù)為必選 |
open | 表示該語(yǔ)句以什么開(kāi)始,最常用的是左括弧’(’,注意:mybatis會(huì)將該字符拼接到整體的sql語(yǔ)句之前,并且只拼接一次,該參數(shù)為可選項(xiàng) |
separator | 表示在每次進(jìn)行迭代之間以什么符號(hào)作為分隔符。select * from tab where id in(1,2,3)相當(dāng)于1,2,3之間的"," |
close | 表示該語(yǔ)句以什么結(jié)束,最常用的是右括弧’)’,注意:mybatis會(huì)將該字符拼接到整體的sql語(yǔ)句之后,該參數(shù)為可選項(xiàng) |
查詢
<!--第一種--> <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)⑹且粋€(gè)逗號(hào)分隔的字符串比如"1,2,3,4",還可以簡(jiǎn)化寫(xiě)法,不用轉(zhuǎn)成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>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MyBatis使用<foreach>標(biāo)簽like查詢報(bào)錯(cuò)解決問(wèn)題
- MyBatis使用<foreach>標(biāo)簽報(bào)錯(cuò)問(wèn)題及解決
- Mybatis使用foreach標(biāo)簽實(shí)現(xiàn)批量插入方式
- 關(guān)于MyBatis的foreach標(biāo)簽常用方法
- MyBatis中foreach標(biāo)簽的collection屬性的取值方式
- mybatis中foreach嵌套if標(biāo)簽方式
- mybatis?<foreach>標(biāo)簽動(dòng)態(tài)增刪改查方式
- Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題
相關(guān)文章
Java實(shí)用小技能之快速創(chuàng)建List常用幾種方式
java集合可以說(shuō)無(wú)論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)用小技能之快速創(chuàng)建List常用的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程詳解
這篇文章主要介紹了SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程,文中通過(guò)代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05Java中生產(chǎn)者消費(fèi)者問(wèn)題總結(jié)
這篇文章主要介紹了Java中生產(chǎn)者消費(fèi)者問(wèn)題總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法對(duì)比
這篇文章主要為大家詳細(xì)介紹了Java并發(fā)編程創(chuàng)建并運(yùn)行線程的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03Java中正則表達(dá)式匹配過(guò)程實(shí)例詳解
正則匹配即是在給定字符串中查找符合正則表達(dá)式的字符,下面這篇文章主要給大家介紹了關(guān)于Java中正則表達(dá)式匹配過(guò)程的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10