解決Mybatis中foreach嵌套使用if標(biāo)簽對(duì)象取值的問(wèn)題
foreach嵌套使用if標(biāo)簽對(duì)象取值問(wèn)題
最近做項(xiàng)目過(guò)程中,涉及到需要在 Mybatis 中 使用 foreach 進(jìn)行循環(huán)讀取傳入的查詢條件,動(dòng)態(tài)拼接SQL語(yǔ)句,接口傳入的查詢條件格式:{"advanceSearchList":[{"searchType":10,"searchText":"12"}]} ,根據(jù)我定義的參數(shù)格式,需要在 Mybatis中動(dòng)態(tài)去循環(huán)讀取 advanceSearchList 集合中的json對(duì)象,并根據(jù) json對(duì)象中的 searchType 做不同的處理,需要在 foreach 中嵌套 if 標(biāo)簽進(jìn)行判斷使用。
大體格式
? ? ? ? <foreach collection="advanceSearchList" item="item" index="index" >
? ? ? ? ? ? <if test="xxx == 10 ">
? ? ? ? ? ? ? ? and abc like CONCAT('%', ddd, '%')
? ? ? ? ? ? </if>
? ? ? ? </foreach>因?yàn)楫?dāng)前 foreach 中獲取到的 item 是一個(gè)json對(duì)象,涉及到在 if 標(biāo)簽中獲取當(dāng)前對(duì)象中指定屬性的值,一時(shí)腦抽,沒(méi)有想起來(lái)取值辦法,咨詢?nèi)f能的度娘沒(méi)有得到滿意的回復(fù),經(jīng)過(guò)自己傻瓜式的嘗試,終于找到了取值方法,特此記錄下:
解決辦法
Mybatis 在 foreach 標(biāo)簽中使用 if 標(biāo)簽獲取對(duì)象屬性方法:
直接通過(guò) 對(duì)象.屬性 的方式獲取?。。。?duì),你沒(méi)看錯(cuò),就是直接通過(guò) 對(duì)象.屬性 的方式獲?。。?!
例如:當(dāng)前foreach 循環(huán)獲取的對(duì)象是 item,想要獲取對(duì)象中的 searchType ,直接就是 item.searchType 即可……
代碼如下
? ? ? ? <foreach collection="advanceSearchList" item="item" index="index" >
? ? ? ? ? ? <if test="item.searchType == 10 ">
? ? ? ? ? ? ? ? and abc like CONCAT('%', #{item.searchText}, '%')
? ? ? ? ? ? </if>
? ? ? ? </foreach>Mybatis if 語(yǔ)句嵌套
在使用mybatis的時(shí)候,可以在 if 標(biāo)簽下面加上if標(biāo)簽。
比如要對(duì)這個(gè)sql語(yǔ)句進(jìn)行改進(jìn)。
select a.* from emp a?
inner join dept b
on a.deptno = b.no
where ?b.place= #{place}要求
如果 傳入的 地點(diǎn) 是 North Korea 那么 符合 a中的條件也可以。
a.male = 'M' or a.age ?bewteen ?20 and 30?
where語(yǔ)句可以這么寫(xiě)
select * from emp e?
<where>
<if test="_parameter.place != null and _parameter.place != '' ">
and?
<if test="_parameter.place == 'North Korea' "> ?( ?</if>
b.place = #{place}
<if test="_parameter.place == 'North Korea' ">
or a.male = 'M' or a.ge between 20 and 30 ?)
</if>
</if>
</where>注意里面的括號(hào)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot使用自定義配置的線程池執(zhí)行Async異步任務(wù)
這篇文章主要介紹了spring boot使用自定義配置的線程池執(zhí)行Async異步任務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密
這篇文章主要介紹了Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java使用Logback配置輸出日志內(nèi)容到文件示例代碼
這篇文章主要介紹了java?Logback輸出日志內(nèi)容到文件,要將logger.info的信息輸出到文件,您可以使用Logback配置,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問(wèn)題
這篇文章主要介紹了解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過(guò)來(lái)看看吧2020-08-08
如何通過(guò)Java實(shí)現(xiàn)PDF轉(zhuǎn)高質(zhì)量圖片
在Java中,將PDF文件轉(zhuǎn)換為高質(zhì)量的圖片可以使用不同的庫(kù),其中最常用的庫(kù)之一是?Apache?PDFBox,下面我們就來(lái)看看這個(gè)庫(kù)的具體使用吧2024-10-10
SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù)
本文主要介紹了SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Spring?Boot項(xiàng)目中遇到`if-else`語(yǔ)句七種具體使用方法解析
當(dāng)在Spring?Boot項(xiàng)目中遇到大量if-else語(yǔ)句時(shí),優(yōu)化這些代碼變得尤為重要,因?yàn)樗鼈儾粌H增加了維護(hù)難度,還可能影響應(yīng)用程序的可讀性和性能,以下是七種具體的方法,用于在Spring?Boot項(xiàng)目中優(yōu)化和重構(gòu)if-else語(yǔ)句,感興趣的朋友一起看看吧2024-07-07

