oracle in 超过1000 ,mybatis实现
来源:互联网 发布:波斯人信札知乎 编辑:程序博客网 时间:2024/05/21 06:42
我们在查数据库的时候,由于分库或者其他的原因,需要把一部分数据查出来再用作另一个sql的条件,这时就很容易出现 in 超过1000的情况。
这里我只是补充一下网上 id in () or id in () 的具体实现:
入参idList:List<Long> , size大于 1000
1.首先,最好不要用$符拼接sql语句的方式,sql注入什么的,老问题。
这个idList肯定是要切割的,idMutilList:List<List<Long>>
写个切割list的公用方法:
public static <E> List<List<E>> splitList (List<E> targetList,Integer splitSize){ if(targetList == null) return null; Integer size = targetList.size(); List<List<E>> resultList = new ArrayList<List<E>>(); if(size <= splitSize) { resultList.add(targetList); } else { for (int i = 0; i < size; i += splitSize) { //用于限制最后一部分size小于splitSize的list Integer limit = i+splitSize; if(limit > size){ limit = size; } resultList.add(targetList.subList(i, limit)); } } return resultList; }
2.如果你不需要在sql里面进行排序或分页,分批次查数据库,查出来数据之后add到一起就好了,毕竟用or去连接sql性能会很差。
3.mybatis提供了循环的方式foreach(ibatis是一样的,iterate),既然有循环,再套一层就可以处理List<List<Long>>这种入参了
具体的mapper:
AND ( ID IN<foreach collection="idMutilList" index="index" item="idList" separator=" OR ID IN " ><foreach collection="idList" index="index" item="id" open="(" separator="," close=")"> #{id}</foreach> </foreach>)
结语:这种方案性能不会很好,oracle sql语句本身有长度限制,若数据量太大了会报sql超长的错误。如果能从业务上拆解sql,找解决方案,那是最好的。如果你的条件允许你在数据库建表(一般不允许在生产环境建表),你可以建个中间表或临时表啥的,数据插进去,两张表的话那就好办了,inner join 或子查询什么的,性能也很好。再不行那就采用第2条说的,自己写排序和分页吧。
0 0
- oracle in 超过1000 ,mybatis实现
- Oracle in超过超过1000的解决方案(JAVA版本)
- oracle 记录超过1000条,使用in方法
- 关于oracle in后的参数个数超过1000问题
- Oracle数据库中IN参数个数超过1000的问题
- 处理 Oracle SQL in 超过1000 的解决方案
- 关于oracle in后的参数个数超过1000问题
- oracle中in的个数超过1000的解决办法
- 解决oracle in 超过1000 报错问题
- 解决Oracle in 超过1000个问题 C#拼接字符串
- Oracle中IN参数个数超过1000的解决方案
- Oracle查询中IN参数超过1000的解决方法
- JAVA 处理 Oracle SQL in 超过1000 的解决方案
- mybatis xml中使用in的sql长度超过1000的解决办法
- 针对oracle中in操作超过1000个参数 会抛异常 处理实例
- oracle数据库查询语句in后面的参数个数超过1000的处理方式
- mybatis关于oracle in 1000个数限制的解决
- MyBatis分页实现 - Oracle
- cocos2d-x-bug集
- 51nod 1183编辑距离 经典dp
- 法法塔的奖励
- Bootstrap快速上手
- 统计一个全是小写字母的字符串中字母的种类数
- oracle in 超过1000 ,mybatis实现
- 安装mongoDB遇到的问题
- <meta>标签用法
- 解决Tomcat Error listenerStart 问题
- opencl:C++接口配置抛出异常
- java 分页
- Photoshop CS6 实例之用通道抠取人像
- 使用ActionBar报空指针异常
- windows 7 使用 powershell 的几个本地操作常用命令