千家信息网

怎么解决mybatis in查询条件过长的问题

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,怎么解决mybatis in查询条件过长的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mybatis in查询条件过长的解决方
千家信息网最后更新 2025年02月08日怎么解决mybatis in查询条件过长的问题

怎么解决mybatis in查询条件过长的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

mybatis in查询条件过长的解决

方法1:分次查询,将参数且分割成多个短的查询后合并

代码:

  int splitNum =(int) Math.ceil( (float) ids.length/999); //切片数量      List itemIdList = new ArrayList<>(Arrays.asList(ids));      List> splitList = averageAssign(itemIdList, splitNum);      for (List list : splitList) {       param.put("itemIds",list);       List> itemStatisticsList = iProcessExtMapper.getItemStatisticsList(param);       result.addAll(itemStatisticsList);      }

将list分成N等分方法方法:

 public static  List> averageAssign(List source,int n){  List> result=new ArrayList>();  int remaider=source.size()%n;  //(先计算出余数)  int number=source.size()/n;  //然后是商  int offset=0;//偏移量  for(int i=0;i value=null;   if(remaider>0){    value=source.subList(i*number+offset, (i+1)*number+offset+1);    remaider--;    offset++;   }else{    value=source.subList(i*number+offset, (i+1)*number+offset);   }   result.add(value);  }  return result; }

方法2:xml文件中编写sql

i.id in              ) OR ID IN(                  ,       #{item} 

sql逻辑:

ID IN(ids[0],ids[1]+...+ids[998])OR ID IN (ids[999],ids[1000],...ids[max])

mybatis大于1000的in查询的解决

之前公司一位同事写的方法:

但是随着数据量增加,发现大于2000这种方法会报错;

论证如下

解决办法

                 NULL ) OR DOC.ID IN (#{item}            

关于怎么解决mybatis in查询条件过长的问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0