政务服务平台开发需要注意如何提升小程序跨平台兼容性与用户体验
1473
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~