app开发者平台在数字化时代的重要性与发展趋势解析
1455
2022-12-02
mybatis in查询条件过长的解决方案
目录mybatis in查询条件过长的解决方法1:分次查询,将参数且分割成多个短的查询后合并方法2:xml文件中编写sqlmybatis大于1000的in查询的解决论证如下解决办法
mybatis in查询条件过长的解决
方法1:分次查询,将参数且分割成多个短的查询后合并
代码:
int splitNum =(int) Math.ceil( (float) ids.length/999); //切片数量
List
List> splitList = averageAssign(itemIdList, splitNum);
for (List
param.put("itemIds",list);
List
result.addAll(itemStatisticsList);
}
将list分成N等分方法方法:
public static List int remaider=source.size()%n; //(先计算出余数) int number=source.size()/n; //然后是商 int offset=0;//偏移量 for(int i=0;i List if(remaider>0){ value=source.subList(i*number+offset, (i+1)*number+offset+1); remaider--; offset++; }else{ value=souhttp://rce.subList(i*number+offset, (i+1)*number+offset); } result.add(value); } return result; } 方法2:xml文件中编写sql i.id in #{item} sql逻辑: ID IN(ids[0],ids[1]+...+ids[998])OR ID IN (ids[999],ids[1000],...ids[max]) mybatis大于1000的in查询的解决 之前公司一位同事写的方法: SELECT FROM KM_DIR_DOC_LINK T WHERE T.DIR_ID IN <foreach collection="array" index="index" open="(" close=")" item="item" separator=","> 但是随着数据量增加,发现大于2000这种方法会报错; 论证如下 解决办法 > averageAssign(List
> result=new ArrayList
>();
List> result=new ArrayList
>();
int remaider=source.size()%n; //(先计算出余数)
int number=source.size()/n; //然后是商
int offset=0;//偏移量
for(int i=0;i List if(remaider>0){ value=source.subList(i*number+offset, (i+1)*number+offset+1); remaider--; offset++; }else{ value=souhttp://rce.subList(i*number+offset, (i+1)*number+offset); } result.add(value); } return result; } 方法2:xml文件中编写sql i.id in #{item} sql逻辑: ID IN(ids[0],ids[1]+...+ids[998])OR ID IN (ids[999],ids[1000],...ids[max]) mybatis大于1000的in查询的解决 之前公司一位同事写的方法: SELECT FROM KM_DIR_DOC_LINK T WHERE T.DIR_ID IN <foreach collection="array" index="index" open="(" close=")" item="item" separator=","> 但是随着数据量增加,发现大于2000这种方法会报错; 论证如下 解决办法
List
if(remaider>0){
value=source.subList(i*number+offset, (i+1)*number+offset+1);
remaider--;
offset++;
}else{
value=souhttp://rce.subList(i*number+offset, (i+1)*number+offset);
}
result.add(value);
}
return result;
}
方法2:xml文件中编写sql
i.id in
#{item}
sql逻辑:
ID IN(ids[0],ids[1]+...+ids[998])OR ID IN (ids[999],ids[1000],...ids[max])
mybatis大于1000的in查询的解决
之前公司一位同事写的方法:
SELECT
FROM KM_DIR_DOC_LINK T
WHERE T.DIR_ID IN
<foreach collection="array" index="index" open="(" close=")" item="item" separator=",">
但是随着数据量增加,发现大于2000这种方法会报错;
论证如下
解决办法
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~