最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis解決<foreach>標(biāo)簽不能超過1000的問題

 更新時(shí)間:2024年05月01日 08:10:21   作者:小海海不怕困難  
MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡(jiǎn)化數(shù)據(jù)庫(kù)操作的編寫,而foreach是MyBatis中的一個(gè)重要標(biāo)簽,用于在SQL語(yǔ)句中進(jìn)行循環(huán)操作,本文主要給大家介紹了mybatis解決<foreach>標(biāo)簽不能超過1000的問題,需要的朋友可以參考下

錯(cuò)誤寫法:

    <select id="getProductInfoList" resultType="vo">
        select a.name 
        from A a
        where a.idin
        <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </select>

錯(cuò)誤原因:

當(dāng)<foreach>標(biāo)簽內(nèi)的數(shù)量超過1000個(gè)時(shí)會(huì)提示一下報(bào)錯(cuò):

java.sql.SQLSyntaxErrorException: ORA-01795: maximum number of expressions in a list is 1000

正確寫法:

方案1(將傳參變成SQL語(yǔ)句嵌套在SQL里面):

    <select id="getProductInfoList" resultType="vo">
        select a.name 
        from A a
        where a.id in
         (select b.id from B b where b.id = #{billNo}  and DELETED = 0)
    </select>

方案2(利用or每1000條添加一個(gè)or)

	SELECT
		*
	FROM
		${tabNameMx} M
		WHERE
		M.CODE_ID IN
		<foreach collection="idList" index="index" open="(" close=")" item="id" separator=",">
			<if test="(index % 999) == 998"> NULL) OR M.CODE_ID IN(</if>#{id}
		</foreach>

這個(gè)SQL大家看著可能覺得有點(diǎn)懵逼,現(xiàn)在給你寫段這段sql最終會(huì)變成什么樣子,這樣你瞬間就懂了。

SQL最終執(zhí)行的樣子:

CODE_ID IN('......','998',NULL ) OR M.CODE_ID IN('999',.....  NULL) OR M.CODE_ID IN('.....')

方案3(拼接OR ID IN ()):

<select id="queryEnoByCapita">
  select t.custid,to_char(t.eno) as eno from T_E_ACCOUNT t where t.status !='2' and   t.custid in
 <trim suffixOverrides=" OR t.custid in()">
 <foreach collection="capita" item="custId" index="index" open="(" close=")">   
            <if test="index != 0">
                <choose>
                    <when test="index % 1000 == 999">) OR t.custid in (</when>
                    <otherwise>,</otherwise>
                </choose>
            </if>
     #{custId,jdbcType=VARCHAR} 
 </foreach>
 </trim>
</select>

分析:

<trim>標(biāo)簽suffixOverrides:去掉后綴匹配上的東西,本例中后綴如果是 OR t.custid in()與suffixOverrides的屬性值剛好匹配,則去掉 OR t.custid in()
 
index 集合迭代的位置從0開始,為何需要<if test="index != 0">?如果沒有,則sql是 t.cust in (,1,2..)會(huì)多一個(gè)逗號(hào)
 
沒有999條數(shù)據(jù)的拼接SQL為:t.cust in (1,2..998) 
超過999條的數(shù)據(jù)拼接SQL為:t.cust in (1,2..998) or t.custid in(999,1000...1998) ...

拓展:

擴(kuò)展1:foreach元素的屬性主要有 item、index、 collection、open、separator、close

collection  foreach循環(huán)的對(duì)象
item 集合中每一個(gè)元素或者該集合的對(duì)象,支持對(duì)象點(diǎn)屬性的方式獲取屬性#{obj.filed} 或#{value}
index 循環(huán)的下標(biāo),從0開始 
open 表示以什么開始 
separator 每次進(jìn)行迭代之間以什么符號(hào)作為分隔符 
close表示以什么結(jié)束

擴(kuò)展2:MyBatis trim 標(biāo)簽四個(gè)屬性和其作用

prefix  添加前綴
prefixOverrides  刪除前綴
suffix  添加后綴
suffixOverrides  刪除后綴

到此這篇關(guān)于mybatis解決<foreach>標(biāo)簽不能超過1000的問題的文章就介紹到這了,更多相關(guān)mybatis foreach不能超過1000內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java MD5加密(實(shí)例講解)

    Java MD5加密(實(shí)例講解)

    下面小編就為大家?guī)硪黄狫ava MD5加密(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java面試常見問題之Hibernate總結(jié)

    java面試常見問題之Hibernate總結(jié)

    這篇文章主要介紹了在java面試過程中hibernate比較常見的問題,包括Hibernate的檢索方式,Hibernate中對(duì)象的狀態(tài),Hibernate的3種檢索策略是什么,Session的find()方法以及Query接口的區(qū)別等方面問題的總結(jié),需要的朋友可以參考下
    2015-07-07
  • 關(guān)于Java中HashCode方法的深入理解

    關(guān)于Java中HashCode方法的深入理解

    這篇文章主要給大家介紹了關(guān)于Java中HashCode方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Maven實(shí)現(xiàn)自己的starter依賴

    Maven實(shí)現(xiàn)自己的starter依賴

    本文主要介紹了Maven實(shí)現(xiàn)自己的starter依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文搞懂JAVA 枚舉(enum)

    一文搞懂JAVA 枚舉(enum)

    這篇文章主要介紹了JAVA 枚舉(enum)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • java仿C++模擬實(shí)現(xiàn)一個(gè)智能指針

    java仿C++模擬實(shí)現(xiàn)一個(gè)智能指針

    在?C++?等語(yǔ)言中,指針?是對(duì)內(nèi)存地址的直接操作,為靈活管理內(nèi)存和實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)提供了強(qiáng)大能力,本文將使用純Java實(shí)現(xiàn)一個(gè)通用的?SmartPointer<T>框架為各種資源類型提供類似?C++?智能指針的使用體驗(yàn)
    2025-05-05
  • java算法題解Leetcode15三數(shù)之和實(shí)例

    java算法題解Leetcode15三數(shù)之和實(shí)例

    這篇文章主要為大家介紹了java算法題解Leetcode15三數(shù)之和實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Java內(nèi)部類詳解

    Java內(nèi)部類詳解

    內(nèi)部類在 Java 里面算是非常常見的一個(gè)功能了,在日常開發(fā)中我們肯定多多少少都用過,這里總結(jié)一下關(guān)于 Java 中內(nèi)部類的相關(guān)知識(shí)點(diǎn)和一些使用內(nèi)部類時(shí)需要注意的點(diǎn)。
    2020-02-02
  • Java commons io包實(shí)現(xiàn)多線程同步圖片下載入門教程

    Java commons io包實(shí)現(xiàn)多線程同步圖片下載入門教程

    這篇文章主要介紹了Java commons io包實(shí)現(xiàn)多線程同步圖片下載入門,commons io: 是針對(duì)開發(fā)IO流功能的工具類庫(kù),其中包含了許多可調(diào)用的函數(shù),感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • MyBatis工廠類封裝與簡(jiǎn)化實(shí)現(xiàn)

    MyBatis工廠類封裝與簡(jiǎn)化實(shí)現(xiàn)

    工廠類的目的是將對(duì)象的創(chuàng)建邏輯封裝在一個(gè)類中,以便客戶端代碼無需了解具體的實(shí)現(xiàn)細(xì)節(jié),本文主要介紹了MyBatis工廠類封裝與簡(jiǎn)化實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

垫江县| 石景山区| 湖南省| 平谷区| 武宣县| 朝阳县| 灵川县| 宝山区| 黑河市| 南澳县| 西吉县| 五大连池市| 根河市| 光泽县| 莆田市| 河源市| 平武县| 阿合奇县| 博客| 电白县| 威海市| 辽中县| 康乐县| 镇沅| 和林格尔县| 习水县| 嘉黎县| 通渭县| 汉中市| 射洪县| 青冈县| 诏安县| 罗甸县| 监利县| 广元市| 兰考县| 军事| 霍城县| 乐清市| 海原县| 荣成市|