首页 > 其他分享 >mybatis in中超过1000个值解决办法(超简单)

mybatis in中超过1000个值解决办法(超简单)

时间:2024-09-12 22:25:34浏览次数:10  
标签:个值 ... 999 userId sql mybatis 1000

众所周知sql中条件in的值是不能超过1000个的,而mybatis可以使用动态sql拼接的方式绕开这个限制,网上看了很多例子,我感觉都不太好理解,下面介绍一个超简单的例子。

select * from user_info
where  1 = 1
<if test="userList!= null and userList.size() > 0">
  and (userId in
  <foreach collection="userList" open="(" close=")" separator="," item="userId" index="index">
    //只需在原基础上加一个if条件,最外面加上一对括号就可以了
    <if test="index != 0 and index % 999 == 0">
      #{userId}) or userId in (
    </if>
      #{userId}
  </foreach>
  )
</if>

  

where 
type = 2
and create_time <![CDATA[>=]]> #{startTime}
and create_time <![CDATA[<=]]> #{endTime}
and (
	id in
    <foreach item='item' index='index' collection='list' open='(' separator=',' close=')'>,
            <if test = 'index%999== 998'>) or id in ( </if> #{item},
    </foreach>
    )

  

原来没加if条件的情况,in超过1000行:
and (userId in (1,2,3,4,5...998,999,1000,1001...))

加上if条件后,每隔999个位置插入一个#{userId}) or userId in (分割成两个in:
and (userId in (1,2,3,4,5...998,999) or userId in (999,1000,1001...))

虽然in太多的值会导致sql性能堪忧,但有时候身不由己,没有别的办法的时候也只能这么干了


原文链接:https://blog.csdn.net/qq_38875964/article/details/136566536

标签:个值,...,999,userId,sql,mybatis,1000
From: https://www.cnblogs.com/xianz666/p/18411241

相关文章

  • 项目中有 10000 个 if else 如何优化?
    本文我总结10种优化ifelse的方法,当然根据不同的场景还可以使用多态、责任链模式、模板方法模式等更多方法来消除ifelse。方案1:策略模式如果有 1万个 ifelse分支,那就会有1万个策略类,此时就会造成类膨胀,并且随着时间的推移逐渐变得更加庞大而复杂。如果是多层的ifelse......
  • 项目中有 10000 个 if else 如何优化?
    本文我总结10种优化ifelse的方法,当然根据不同的场景还可以使用多态、责任链模式、模板方法模式等更多方法来消除ifelse。方案1:策略模式如果有 1万个 ifelse分支,那就会有1万个策略类,此时就会造成类膨胀,并且随着时间的推移逐渐变得更加庞大而复杂。如果是多层的ifelse......
  • Mybatis与Mybatis-plus的比较
    MyBatis和MyBatis-Plus都是流行的JavaORM框架,它们在处理数据库操作时各有优势和特点。以下是对两者的比较:MyBatisMyBatis是一个成熟的ORM框架,它提供了映射SQL语句到Java对象的能力。以下是MyBatis的一些优缺点:优点:灵活性高:MyBatis允许开发者编写原生SQL,提......
  • 浅析 MyBatis 中的连接池和缓存
    文章目录一、MyBatis简介二、连接池1.连接池的作用2.MyBatis中的连接池实现3.连接池的参数配置三、缓存1.缓存的作用2.MyBatis的一级缓存3.MyBatis的二级缓存4.缓存的刷新和清空四、总结在使用MyBatis进行Java应用开发时,连接池和缓存是两个非常重要......
  • MyBatis-Plus动态表名
    MyBatis-Plus动态表名一、早期方案1.1MyBatis-Plus版本1、添加MyBatis-Plus依赖<dependency>   <groupId>com.baomidou</groupId>   <artifactId>mybatis-plus-boot-starter</artifactId>   <version>3.5.1</version></dependency>......
  • Mybatis读取和存储json类型的数据
    目录一、测试使用JSONObject来获取json二、设置@TableName的autoResultMap为true,@TableField的typeHandler为JacksonTypeHandler.class三、设置xml当中的resultMap四、JacksonTypeHandler讲解五、新增假如是JSONObject异常问题六、遇到转义的问题不管数据库当中是以json还是longte......
  • 让联通1000M宽带2Gwifi速度达到3M/s
    提示:以下内容需要付费:看了的人好的灵魂会卖给我,女的做我的奴婢,男的做奴隶。请看:设置如下:以下因素缺一不可。1打开多媒体开关:2       设置带宽为20M/40M自动:不能设置为40M原理:因为附近的wifi数量非常多,如果设置为40M,那么信号之间干扰会很严重,我亲自试过速度会只有......
  • 滚雪球学MyBatis(12):常见问题与解决方案
    前言欢迎回到我们的MyBatis系列教程。在前几期中,我们已经进行了MyBatis的基础使用、进阶功能及项目实战的详细讲解。通过这些内容,相信大家对MyBatis有了全面的了解,并能够在实际项目中应用MyBatis。然而,在使用MyBatis的过程中,我们可能会遇到各种问题。本期内容中,我们将总结......
  • 滚雪球学MyBatis(13):总结与展望
    前言欢迎回到我们的MyBatis系列教程。在前几期中,我们从基础到进阶,详细讲解了MyBatis的各个方面,并通过项目实战帮助大家巩固所学知识。本期内容中,我们将对整个系列教程进行总结与回顾,并展望未来的学习方向。通过这一期的内容,希望大家能够全面回顾MyBatis的核心知识点,并了解......
  • 科技界掀巨浪:IBM 在中国裁员,几分钟内裁员 1000 人
    1.前言近日,IBM中国宣布撤出在华两大研发中心,引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展,也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对这一突如其来的变化,我们应该如何看待IBM跨国公司的决策?中国IT人才该......