本人在实际开发中,碰到了一些关于批量处理数据的问题,在此记录一下。

1、当数据库是SqlServer时,批量插入或者批量更新的时候切记mybatis中#{}更新的数量不能超过2100个。

2、当数据库是Mysql时,mybatis语句不能超过1MB。否则都会报错!

3、List的元素数量最好不能超过1000个。

可以使用切割List的方式进行处理。 如下代码:

/**
     * 切割List返回对应List集合(批量更新)
     *
     * @param <T>  泛型
     * @param list 原集合
     * @param num  切割间距
     * @return 返回结果
     */
    private <T> List<List<T>> splitListEachNum(List<T> list, int num) {
        List<List<T>> result = new LinkedList<>();
        int length = list.size();
        int cycle = length / num;
        int left = length % num;
        for (int i = 0; i < cycle; i++) {
            List<T> data = list.subList(num * i, num * (i + 1));
            result.add(data);
        }
        if (left > 0) {
            List<T> data = list.subList(num * cycle, num * cycle + left);
            result.add(data);
        }
        return result;
    }