欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis 動(dòng)態(tài)SQL巧用突破in數(shù)量限制的方案

 更新時(shí)間:2025年07月29日 10:45:52   作者:Lanse丶12  
本文主要介紹了MyBatis動(dòng)態(tài)SQL通過分塊處理突破IN子句參數(shù)數(shù)量限制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

痛點(diǎn)

oracle 11g 只能in1000個(gè)條件,大數(shù)據(jù)量無(wú)法處理

功能說明

用于解決數(shù)據(jù)庫(kù) IN 子句參數(shù)數(shù)量限制問題(如 Oracle 的 1000 元素限制),通過動(dòng)態(tài)分塊生成多組 IN 條件。

完整代碼示例

<if test="piids != null and piids.size > 0">
    AND (t0.processinstid IN
    <trim suffixOverrides=" OR t0.processinstid IN()">
        <foreach collection="piids" item="item" index="index" open="(" close=")">
            <if test="index != 0">
                <choose>
                    <when test="index % 1000 == 999">) OR t0.processinstid IN (</when>
                    <otherwise>,</otherwise>
                </choose>
            </if>
            #{item}
        </foreach>
    </trim>
    )
</if>

語(yǔ)法逐層解析

  1. 外層條件判斷
    <if test="piids != null and piids.size > 0">
  2. trim 標(biāo)簽清理
    <trim suffixOverrides=" OR t0.processinstid IN()">
    解決的問題:消除最后一塊可能殘留的無(wú)效語(yǔ)句
    機(jī)制:自動(dòng)刪除結(jié)尾匹配的指定字符串
  3. foreach 分塊邏輯
    <foreach collection="piids" item="item" index="index" open="(" close=")">

分塊規(guī)則

<choose>
    <when test="index % 1000 == 999">) OR t0.processinstid IN (</when>
    <otherwise>,</otherwise>
</choose>

分塊策略:
每 1000 個(gè)元素 分塊(索引從0開始計(jì)算)
index % 1000 == 999 ? 第1000個(gè)元素時(shí)觸發(fā)分塊
連接方式:
同塊元素用 , 連接
分塊時(shí)用 ) OR t0.processinstid IN ( 連接

數(shù)據(jù)庫(kù)適配對(duì)照表

數(shù)據(jù)庫(kù)IN 列表限制調(diào)整方案
Oracle1000保持現(xiàn)有代碼:index % 1000 == 999
(索引從0開始,第1000個(gè)元素時(shí)分塊)
SQL Server2100修改為:index % 2100 == 2099
(索引達(dá)到2099時(shí)觸發(fā)分塊)
MySQL無(wú)硬性限制移除分塊邏輯,直接逗號(hào)連接所有元素
PostgreSQL無(wú)硬性限制移除分塊邏輯,直接逗號(hào)連接所有元素

補(bǔ)充說明:

  1. Oracle/SQL Server 分塊邏輯

    • 因數(shù)據(jù)庫(kù)對(duì) IN 子句的表達(dá)式數(shù)量有嚴(yán)格限制,需通過模運(yùn)算 (%) 控制分塊節(jié)點(diǎn)。
    • 公式:index % N == (N-1),其中 N 為數(shù)據(jù)庫(kù)允許的最大值(Oracle=1000,SQL Server=2100)。
  2. MySQL/PostgreSQL 優(yōu)化

    • 可直接簡(jiǎn)化為:
      <foreach collection="piids" item="item" open="(" close=")" separator=",">
          #{item}
      </foreach>
      

到此這篇關(guān)于mybatis 動(dòng)態(tài)SQL巧用突破in數(shù)量限制的文章就介紹到這了,更多相關(guān)mybatis in數(shù)量限制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Mybatis配置之<typeAliases>別名配置元素解析

    Mybatis配置之<typeAliases>別名配置元素解析

    這篇文章主要介紹了Mybatis配置之<typeAliases>別名配置元素解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java Scanner對(duì)象中hasNext()與next()方法的使用

    Java Scanner對(duì)象中hasNext()與next()方法的使用

    這篇文章主要介紹了Java Scanner對(duì)象中hasNext()與next()方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程介紹

    SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程介紹

    這篇文章主要介紹了SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • java 發(fā)送帶Basic Auth認(rèn)證的http post請(qǐng)求實(shí)例代碼

    java 發(fā)送帶Basic Auth認(rèn)證的http post請(qǐng)求實(shí)例代碼

    下面小編就為大家?guī)硪黄猨ava 發(fā)送帶Basic Auth認(rèn)證的http post請(qǐng)求實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java如何獲取發(fā)送請(qǐng)求的電腦的IP地址

    Java如何獲取發(fā)送請(qǐng)求的電腦的IP地址

    文章介紹了如何通過HttpServletRequest獲取客戶端IP地址,特別是當(dāng)客戶端通過代理訪問時(shí),如何使用x-forwarded-for頭來獲取真實(shí)的IP地址
    2024-11-11
  • 關(guān)于@RequestParam的主要用法詳解

    關(guān)于@RequestParam的主要用法詳解

    這篇文章主要介紹了關(guān)于@RequestParam的主要用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Netty進(jìn)階之ChannelPoolMap源碼解析

    Netty進(jìn)階之ChannelPoolMap源碼解析

    這篇文章主要介紹了Netty進(jìn)階之ChannelPoolMap源碼解析,ChannelPoolMap是用來存儲(chǔ)ChannelPool和指定key的一個(gè)集合Map,實(shí)際的應(yīng)用場(chǎng)景就是服務(wù)器端是一個(gè)分布式集群服務(wù),擁有多個(gè)配置地址,這樣我們就可以配置多個(gè)服務(wù)地址,減輕單臺(tái)服務(wù)器的壓力,需要的朋友可以參考下
    2023-11-11
  • Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用詳解

    Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用詳

    這篇文章主要介紹了Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • mybatis3中@SelectProvider傳遞參數(shù)方式

    mybatis3中@SelectProvider傳遞參數(shù)方式

    這篇文章主要介紹了mybatis3中@SelectProvider傳遞參數(shù)方式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例

    Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例

    在Maven項(xiàng)目里,我們經(jīng)常需要導(dǎo)入jar包依賴,本文主要介紹了Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08

最新評(píng)論