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

mybatis解決<foreach>標簽不能超過1000的問題

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

錯誤寫法:

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

錯誤原因:

當<foreach>標簽內的數(shù)量超過1000個時會提示一下報錯:

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

正確寫法:

方案1(將傳參變成SQL語句嵌套在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條添加一個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>

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

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>標簽suffixOverrides:去掉后綴匹配上的東西,本例中后綴如果是 OR t.custid in()與suffixOverrides的屬性值剛好匹配,則去掉 OR t.custid in()
 
index 集合迭代的位置從0開始,為何需要<if test="index != 0">?如果沒有,則sql是 t.cust in (,1,2..)會多一個逗號
 
沒有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) ...

拓展:

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

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

擴展2:MyBatis trim 標簽四個屬性和其作用

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

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

相關文章

  • Java MD5加密(實例講解)

    Java MD5加密(實例講解)

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

    java面試常見問題之Hibernate總結

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

    關于Java中HashCode方法的深入理解

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

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

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

    一文搞懂JAVA 枚舉(enum)

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

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

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

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

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

    Java內部類詳解

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

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

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

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

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

最新評論

友谊县| 新邵县| 贡觉县| 渑池县| 太保市| 常熟市| 泽州县| 阿坝县| 莱阳市| 林口县| 平阴县| 尚志市| 阜平县| 南昌县| 宽城| 西乡县| 琼结县| 鹤峰县| 聊城市| 肃宁县| 正镶白旗| 淳安县| 新宁县| 晴隆县| 拉萨市| 台南市| 团风县| 万载县| 涪陵区| 松桃| 丰县| 浑源县| 台中县| 九龙坡区| 淮阳县| 新兴县| 定结县| 无为县| 太谷县| 平舆县| 宿州市|