mybatis foreach 循環(huán) list(map)實(shí)例
foreach 循環(huán) list(map)
直接上代碼:
整體需求就是
1.分頁(yè)對(duì)象里面有map map里面又有數(shù)組對(duì)象
2.分頁(yè)對(duì)象里面有l(wèi)ist list里面有map map里面有數(shù)組對(duì)象。
public class Page { private Map maps; private List lists; public Map getMaps() { return maps; } public void setMaps(Map maps) { this.maps = maps; } public List getLists() { return lists; } public void setLists(List lists) { this.lists = lists; } } String [] str = {"1,2"}; Page page = new Page(); 實(shí)體分頁(yè)對(duì)象(包括其他頁(yè)面屬性) maps.put("str", str); ? 批量查詢的ID page.setMaps(maps); ? ? maps對(duì)象保存在分頁(yè)屬性中 List<Map> mapTest = userService.mapTest(page); System.out.println(mapTest);
需求。請(qǐng)求前臺(tái)頁(yè)面的時(shí)候 需要傳多個(gè)訂單號(hào)比如1,2
然而其他參數(shù)也要有。就要用到分頁(yè)實(shí)體 跟map結(jié)合 分頁(yè)實(shí)體保存其他屬性。map保存要循環(huán)的ID 或是訂單號(hào)
mybatis.foreach循環(huán)如下
這里只做ID或是訂單ID的演示,普通屬性#{id}就行。
取page.maps.str(str是一個(gè)數(shù)組)
在collection 這里面直接寫 入?yún)?maps
如果入?yún)⑹荓IST
稍微改一下即可
源數(shù)據(jù)
maps.put("str", str); list.add(maps); List<Map> mapTest = userService.mapTest1(list); System.out.println(mapTest);
<foreach item="items" index="index" collection="list" open="(" ?separator="," ?close=")"> --> ? ? ? <foreach item="item" index="index" collection="items.str" open="(" ?separator="," ?close=")" ? > ? ? ? ? ? ? ? ? #{item} ? ? ? </foreach> </foreach>
原理就是 先告訴mybatis我要先循環(huán)list然后拿到list里面的map.str 即可。
使用foreach處理list中的map
參數(shù)的數(shù)據(jù)結(jié)構(gòu)是一個(gè)ArrayList<Map<String, Integer>>,需要以String,Integer為條件批量更新數(shù)據(jù)庫(kù)的數(shù)據(jù).
將參數(shù)封裝到叫做JsonData的qv中,JsonData的關(guān)鍵代碼是
? ? private ArrayList<Map<String, Integer>> usersPlatforms; ? ? public ArrayList<Map<String, Integer>> getUsersPlatforms() { ? ? ? ? return usersPlatforms; ? ? } ? ? ? public void setUsersPlatforms(ArrayList<Map<String, Integer>> usersPlatforms) { ? ? ? ? this.usersPlatforms = usersPlatforms; ? ? }
Mapper中的方法是
updateXxxx(JsonData jsonData);
Mapper.xml的sql是
<update id="updateXxxx" parameterType="JsonData"> ? ? ? ? UPDATE xxx SET `xx` = 10 ? ? ? ? <where> ? ? ? ? ? ? <foreach collection="usersPlatforms" item="userPlatform" open="" close="" separator="OR"> ? ? ? ? ? ? ? ? <foreach collection="userPlatform.keys" item="key" open=" user_id = " close="" separator=""> ? ? ? ? ? ? ? ? ? ? #{key} ? ? ? ? ? ? ? ? </foreach> ? ? ? ? ? ? ? ? <foreach collection="userPlatform.values" item="value" open=" AND platform = " close="" separator=""> ? ? ? ? ? ? ? ? ? ? #{value} ? ? ? ? ? ? ? ? </foreach> ? ? ? ? ? ? </foreach> ? ? ? ? </where> ? ? </update>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis一級(jí)緩存和二級(jí)緩存的區(qū)別及說(shuō)明
這篇文章主要介紹了mybatis一級(jí)緩存和二級(jí)緩存的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11詳解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之事件驅(qū)動(dòng)與CQRS
這篇文章分析了如何應(yīng)用事件來(lái)分離軟件核心復(fù)雜度。探究CQRS為什么廣泛應(yīng)用于DDD項(xiàng)目中,以及如何落地實(shí)現(xiàn)CQRS框架。當(dāng)然我們也要警惕一些失敗的教訓(xùn),利弊分析以后再去抉擇正確的應(yīng)對(duì)之道2021-06-06java設(shè)計(jì)模式學(xué)習(xí)之簡(jiǎn)單工廠模式
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式學(xué)習(xí)之簡(jiǎn)單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Java用Arrays.asList初始化ArrayList實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于Java中使用Arrays.asList初始化ArrayList的知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-10-10Windows10系統(tǒng)下JDK1.8環(huán)境變量的配置
今天帶大家學(xué)習(xí)在Windows10系統(tǒng)下怎么配置JDK1.8環(huán)境變量,文中有非常詳細(xì)的安裝及配置教程,對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Spring?Security?基于URL的權(quán)限判斷源碼解析
這篇文章主要介紹了Spring?Security?基于URL的權(quán)限判斷問(wèn)題,我們想要實(shí)現(xiàn)自己的基于請(qǐng)求Url的授權(quán)只需自定義一個(gè)?AccessDecisionManager即可,接下來(lái)跟隨小編一起看看實(shí)現(xiàn)代碼吧2021-12-12JAVA通過(guò)Filter實(shí)現(xiàn)允許服務(wù)跨域請(qǐng)求的方法
這里的域指的是這樣的一個(gè)概念:我們認(rèn)為若協(xié)議 + 域名 + 端口號(hào)均相同,那么就是同域即我們常說(shuō)的瀏覽器請(qǐng)求的同源策略。這篇文章主要介紹了JAVA通過(guò)Filter實(shí)現(xiàn)允許服務(wù)跨域請(qǐng)求,需要的朋友可以參考下2018-11-11vue 實(shí)現(xiàn)刪除對(duì)象的元素 delete
這篇文章主要介紹了vue 實(shí)現(xiàn)刪除對(duì)象的元素delete,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03