数据批量入库 分批算法

数据量过大时使用批量入库, java分批算法

/**
 *  工具类
 * @author ryr
 * @Date: 2019-09-04 11:17
 */
public class Common {
    /** 默认每次提交数据量为 2100条 */
    private static int PAGE_SIZE = 2100;

    /**
     * 批量提交方法
     *
     * @param dataList 要保存的数据
     * @param batchInsertMapper dao接口
     * @param pageSize 每次提交量
     * @param <T> 对象类型
     * @return 成功保存数量
     */
    public static <T> int divideBatch(List<T> dataList, BatchInsertMapper<T> batchInsertMapper, int pageSize) {
        if (dataList==null||dataList.isEmpty()) return 0;
        PAGE_SIZE = (pageSize > 0 && pageSize < PAGE_SIZE) ? pageSize : PAGE_SIZE;
        int total_pageNum = dataList.size()/PAGE_SIZE + (dataList.size()%PAGE_SIZE > 0 ? 1: 0);
        int success_num = 0;
        for (int i = 1; i < total_pageNum + 1; i++) {
            List<T> insertData = divideBatch(i, PAGE_SIZE, dataList);
            success_num += batchInsertMapper.insertOfBatch(insertData);
        }
        return success_num;
    }

    /**
     * 批量提交方法(使用默认提交数量 2100)
     *
     * @param dataList 要保存的数据
     * @param batchInsertMapper dao接口
     * @param <T> 对象类型
     * @return 成功保存数量
     */
    public static <T> int divideBatch(List<T> dataList, BatchInsertMapper<T> batchInsertMapper) {
        return divideBatch(dataList,batchInsertMapper,0);
    }

    /**
     * 数据分批
     *
     * @param pageNum 提交页码
     * @param pageSize 提交数量
     * @param dataList 要保存的数据
     * @param <T> 对象类型
     * @return 返回分批数据
     */
    private static <T> List<T> divideBatch(int pageNum, int pageSize, List<T> dataList) {
        return dataList.subList((pageNum - 1)*pageSize, Math.min(pageNum * pageSize, dataList.size()));
    }
}

 

BatchInsertMapper接口只有一个方法,实现这个接口

public interface BatchInsertMapper<T> {
    int insertOfBatch(List<T> ts);
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值