溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Mybatis中foreach嵌套使用if標(biāo)簽對(duì)象取值的問(wèn)題

發(fā)布時(shí)間:2022-02-08 10:31:20 來(lái)源:億速云 閱讀:968 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下如何解決Mybatis中foreach嵌套使用if標(biāo)簽對(duì)象取值的問(wèn)題的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

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 即可&hellip;&hellip;

代碼如下

        <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ǔ)句可以這么寫

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)。

以上就是“如何解決Mybatis中foreach嵌套使用if標(biāo)簽對(duì)象取值的問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI