国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組

這篇具有很好參考價值的文章主要介紹了mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)背景:

前端傳值時可能會有多個字段傳遞過來,需要后臺將這多個字段拼接為 name in (? , ?) and name1 in (? , ?) and name2 in (? , ?) 作為sql查詢條件…如下圖sql語句,即實現(xiàn)多個and xxx in(?,?,?) 拼接

select * from web_ztlc_provateequity WHERE
 cords in ( ? , ? , ?  ) 
 and productName in ( ? , ? , ? ) 
 and product_id in ( ? , ? , ? )

前端傳值的格式

前端傳遞的是json字符串,json中name和infos是一對具有對應關(guān)系的對象,且json中會有多條這種對象,即此對象是一個數(shù)組。而infos中也會有多條數(shù)據(jù),即infos也是一個數(shù)組對象。所以最終前端傳遞過來json格式如下

json字符串:
itemList:[{"name":"cords", "infos":["2", "2222", "2223","2224","2225","2226"] },
          {"name":"productName", "infos":["2號B","SAP智龍3號私募證券投資基金","一村金衍10號第1期"]}]

Debug斷點調(diào)試java如何解析json對象

綜上所述,后臺Java接口在獲取到json字符串后,需要遍歷json中的兩個數(shù)組對象,即name和infos

		//模擬數(shù)據(jù)測試前端傳參
		String itemList="[{ \"name\":\"cords\", \"infos\":[ \"2\", \"2222\", \"2223\",\"2224\",\"2225\",\"2226\" ] },{ \"name\":\"productName\", \"infos\":[ \"2號B\",\"SAP智龍3號私募證券投資基金\",\"一村金衍10號第1期\" ] }]";
		//獲取前端傳過來的參數(shù)數(shù)組
        //String itemList = request.getParameter("itemList");
		if(!StringUtils.isEmpty(itemList)){
			//將參數(shù)數(shù)組轉(zhuǎn)化為json數(shù)組類型
			JSONArray jsonArray = JSONArray.fromObject(itemList);
			if(jsonArray.size()!=0){
				Map<String,Object> columnMap = new HashMap<>();
 				//遍歷jsonarray數(shù)組
				for(int i = 0;i < jsonArray.size(); i++) {
					net.sf.json.JSONObject job = jsonArray.getJSONObject(i);
					String name = job.getString("name");
					List<String> lists =job.getJSONArray("infos");
					if(lists.size()!= 0){
						columnMap.put(name,lists);
					}
				}
				hm.put("columnMap",columnMap);
			}else{
				return null;
			}
		}

第一步 JSONArray.fromObject()

JSONArray jsonArray = JSONArray.fromObject(itemList);
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式
從上圖可以看出JSONArray.fromObject(itemList)后,jsonArray已經(jīng)size=2(解析出了兩條json對象,每條對象又由name和infos各自的鍵值對(key =>value)組成,name中name為key,cords為value(這里的cords就是后面我們sql語句中需要拼接的and條件的字段值);infos中的key為infos,而value又是一個數(shù)組對象(這個數(shù)組里的各個對象,就是我們后面sql語句中需要拼接的in的條件))
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式

第二步 遍歷jsonArray

由第一步可以看出此時jsonArray里已經(jīng)存放了數(shù)組下標為0和1的兩條數(shù)據(jù),那么此時我們就挨個的取出這兩條數(shù)據(jù)(也就是遍歷啦)
第一次for循環(huán)0數(shù)組,取出0數(shù)組中的name和infos,可以看出我們聲明了一個lists數(shù)組,由來存放infos中的所以數(shù)值
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式

如下圖,我們同時還聲明了一個columnMap的Map對象,此對象用來存儲從json中獲取到的name和infos。將name和infos封裝成鍵值對(key=>value)的Map對象,將來傳遞給Mybatis的parameterType="hashmap"的入?yún)傩?通過key來找value。
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式
每次for循環(huán)就放一個鍵值對對象進columnMap,我們這里測試數(shù)據(jù)只有兩條,所以columnMap最終會被放進兩個鍵值對對象即columnMap的size=2.
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式

第三步 mybatis雙重foreach

此時mybatis雙重foreach的雛形就出來了,因為columnMap中已經(jīng)有2個key=>value對象了。也就意味著有多個key,而每個key又對應多個value。所以此時mybais的foreach循環(huán)就得嵌套,第一次循環(huán)key,循環(huán)key時又得循環(huán)key對應的多個value

最終需要foreach雙重遍歷的Map集合的數(shù)據(jù)結(jié)構(gòu)
columnMap為key的value中又存在多個key/value對象,columnMap的結(jié)構(gòu)如下
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式

<select id="queryAllWebZtlcProvateequity" resultMap="BaseResultMap" parameterType="hashmap">
		select * from web_ztlc_provateequity
		<where>
			<if test="columnMap != null and columnMap !=''">
				<foreach item="item" collection="columnMap.entrySet()" index="key" >
				    and ${key} in
				    <foreach item="value" collection="item" open="(" close=")" separator=",">
					     #{value}
				    </foreach>
				</foreach>
			</if>
		</where>
	</select>

foreach標簽說明

collection:需要遍歷的對象,以上代碼可以看出我寫的是collection="columnMap.entrySet()",columnMap是我封裝的Map對象,而entrySet()則是Map的內(nèi)置方法,存儲的是Map中的鍵值對集合,此時第一個foreach就是在遍歷Map中的key。

item:遍歷時每個元素遍歷出來時的別名,這個別名有用,我們第二次foreach是會用到,因為第一次foreach的是key集合,那么第二次foreach時就得遍歷key對應的value集合。

index:表示索引,也就是遍歷集合中的數(shù)組下標,0,1,2,3......等,可以看出這里我填寫的標簽屬性是index="key",下面and拼接時取得就是$key這個變量and ${key} in

open:in語句循環(huán)開始的符號,我們知道sql中in后面的條件是用()括起來的,所以這里我們填寫的屬性是open="("

close:in語句循環(huán)結(jié)束的符號,同上,有開始就有結(jié)束,所以這里我們填寫的屬性是close=")"

separator:多個條件拼接時的分隔符,我們知道in語句中會有多個條件即in(1,2,3,4)而多個條件使用逗號分割,所以這里我們填寫的屬性是separator=","

mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式

最終效果

最后由控制臺可以看出,我們已經(jīng)成功拼接了and xxx in (?,?,?)
mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組,搬磚填坑,mybatis,list,狀態(tài)模式文章來源地址http://www.zghlxwxcb.cn/news/detail-554147.html

到了這里,關(guān)于mybatis雙重foreach實現(xiàn)遍歷map中的兩個list數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 詳細分析Java中的list.foreach()和list.stream().foreach()

    詳細分析Java中的list.foreach()和list.stream().foreach()

    典故來源于項目中使用了兩種方式的foreach,后面嘗試體驗下有何區(qū)別! 先看代碼示例: 使用List的forEach : 使用Stream API的forEach : 兩者輸出結(jié)果都為如下: 既然兩個都輸出差不多的結(jié)果,但兩者還是稍微有些小區(qū)別,具體看下文! forEach() 是List接口的一部分,用于對列表中

    2024年04月25日
    瀏覽(24)
  • 【深入探討】JavaScript 中的 forEach 和 map 區(qū)別

    【深入探討】JavaScript 中的 forEach 和 map 區(qū)別

    ?? 個人主頁: 不叫貓先生 ,公眾號: 前端Clodplay ???♂? 作者簡介:前端領域優(yōu)質(zhì)作者、阿里云專家博主,共同學習共同進步,一起加油呀! ?優(yōu)質(zhì)專欄:VS Code插件開發(fā)極速入門 ?? 資料領?。呵岸诉M階資料可以找我免費領取 map會返回一個新的數(shù)組,而forEach不會 。

    2024年04月28日
    瀏覽(23)
  • JavaScript中的map()和forEach()方法有什么區(qū)別?

    JavaScript中的map()和forEach()方法有什么區(qū)別?

    聚沙成塔·每天進步一點點 前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發(fā)者,這里都將為你提供一個系統(tǒng)而

    2024年02月06日
    瀏覽(21)
  • 詳細分析Mybatis中的<foreach>標簽

    對于Java專欄:Java專欄 對于Mybatis的相關(guān)知識可看我之前的文章:Mybatis從入門到精通(全) 對于其余Java框架可看我之前的文章:java框架 零基礎從入門到精通的學習路線 附開源項目面經(jīng)等(超全) 對于上述Mybatis中曾有講過foreach標簽!此篇博客對其標簽進行拓展 MyBatis中的

    2024年02月02日
    瀏覽(22)
  • Java中的Set、List、Map的區(qū)別及主要實現(xiàn)類方法

    數(shù)組是大小固定的,并且同一個數(shù)組只能存放類型一樣的數(shù)據(jù)(基本類型/引用類型),JAVA集合可以存儲和操作數(shù)目不固定的一組數(shù)據(jù)。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用類型的的數(shù)據(jù),不能存放基本數(shù)據(jù)類型。 JAVA集合主要分為三種類型: Set (集) L

    2024年04月12日
    瀏覽(52)
  • Mybatis plus 存儲 List、Map

    前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。 數(shù)據(jù)庫支持:MySql版本要求 5.7+ 使用MySQL數(shù)據(jù)庫存儲時,由于業(yè)務要求實體類中特定字段需要使用 自定義類型或者List、Map類型。 首先:在需要轉(zhuǎn)換的實體類字段上

    2024年02月15日
    瀏覽(22)
  • 兩個list如何根據(jù)一個list中的屬性去過濾掉另一個list中不包含這部分的屬性,用流實現(xiàn)

    兩個list如何根據(jù)一個list中的屬性去過濾掉另一個list中不包含這部分的屬性,用流實現(xiàn)

    要是需要GPT Plus賬號的小伙伴可以聯(lián)系我~ 你可以使用Java 8的流來實現(xiàn)這個功能。假設你有兩個包含對象的List,每個對象有一個屬性,你想根據(jù)一個List中的屬性值來過濾掉另一個List中不包含這個屬性值的對象。下面是一種使用流的方式來實現(xiàn)這個功能 在上面的例子中,我們

    2024年02月12日
    瀏覽(92)
  • 初識Go語言25-數(shù)據(jù)結(jié)構(gòu)與算法【堆、Trie樹、用go中的list與map實現(xiàn)LRU算法、用go語言中的map和堆實現(xiàn)超時緩存】

    初識Go語言25-數(shù)據(jù)結(jié)構(gòu)與算法【堆、Trie樹、用go中的list與map實現(xiàn)LRU算法、用go語言中的map和堆實現(xiàn)超時緩存】

    ??堆是一棵二叉樹。大根堆即任意節(jié)點的值都大于等于其子節(jié)點。反之為小根堆。 ??用數(shù)組來表示堆,下標為 i 的結(jié)點的父結(jié)點下標為(i-1)/2,其左右子結(jié)點分別為 (2i + 1)、(2i + 2)。 構(gòu)建堆 ??每當有元素調(diào)整下來時,要對以它為父節(jié)點的三角形區(qū)域進行調(diào)整。 插入元素

    2024年02月12日
    瀏覽(93)
  • MyBatis的XML配置:如何判斷List為空并遍歷拼接

    哈嘍,大家好,我是木頭左! 大家好,歡迎來到我的博客!今天要聊一聊關(guān)于MyBatis的XML配置,如何在查詢數(shù)據(jù)表時判斷List是否為空,并進行遍歷拼接。相信這個問題對于很多使用MyBatis的朋友來說都非常實用,所以請大家認真閱讀哦! 在的日常開發(fā)中,經(jīng)常會遇到需要根據(jù)

    2024年04月10日
    瀏覽(18)
  • 深入解析 MyBatis 中的 <;foreach>; 標簽:優(yōu)雅處理批量操作與動態(tài) SQL

    在當今的Java應用程序開發(fā)中,數(shù)據(jù)庫操作是一個不可或缺的部分。MyBatis作為一款頗受歡迎的持久層框架,為我們提供了一種優(yōu)雅而高效的方式來管理數(shù)據(jù)庫操作。在MyBatis的眾多特性中, foreach 標簽無疑是一個強大的工具,它使得在SQL語句中進行動態(tài)循環(huán)迭代變得輕而易舉。

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包