数据库select in报错问题
原因是select in一次最多查询2000个,而list的size超过了2000,导致数据库报错,可以参考下面这个链接,将list 分割成多个list再进行循环查询
List<Beans> listBeans= new ArrayList<>();
if (list.size() > 2000) {
List<List<String>> List = splitList(testList, 2000);
for (List<String> stringList : List) {
listBeans.addAll(Mapper.findList(stringList));
}
} else {
listBeans.addAll(Mapper.findList(list));
}
为了方便,把拆分list的方法也贴出来
/**
* 把一个list分成多个list
*
* @param list 要拆分的List
* @param groupSize 多少个List为一组
* @param <T>
* @return
*/
private <T> List<List<T>> splitList(List<T> list, int groupSize) {
int length = list.size();
// 计算可以分成多少组
int num = (length + groupSize - 1) / groupSize;
List<List<T>> newList = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
// 开始位置
int fromIndex = i * groupSize;
// 结束位置
int toIndex = (i + 1) * groupSize < length ? (i + 1) * groupSize : length;
list.subList(fromIndex, toIndex);
newList.add(list.subList(fromIndex, toIndex));
}
return newList;
}