zoukankan      html  css  js  c++  java
  • 将List 按照指定数量进行拆分,mybatis 批量保存数据

    需求:读取excel 里面的数据,然后存储到数据库,因为excel 里数据量比较大

    1-2w 条,一次性存储到数据库速度会很慢,考虑将List 拆分成1000size 的多个List

    现在有一个List 里面有110条数据,想要均匀拆分成3个小List

     
    int sum = list.size();   数据总条数
      System.out.println("【文件数据量】=" + sum);
            
     int pagesize = 1000;
     int page = (int)Math.ceil((double)sum/pagesize);
    
    每个List 1000条,这里类似分页,先计算出总共的份数(页数)
    然后调用拆分List 的方法
    public static <T> List<List<T>> averageAssign(List<T> source,int n){  
            List<List<T>> result=new ArrayList<List<T>>();  
            int remaider=source.size()%n;  //(先计算出余数)  
            int number=source.size()/n;  //然后是商  
            int offset=0;//偏移量  
            for(int i=0;i<n;i++){  
                List<T> 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;  
        }

    测试,List 五条数据,拆分成3个List 就是 2 - 2 -1

     List<Integer> integers=new ArrayList<>();  
            integers.add(1);  
            integers.add(2);  
            integers.add(3);  
            integers.add(4);  
            integers.add(5);  
     List<List<Integer>> lists=averageAssign(integers, 3);  
    
    结果 [[
    1, 2], [3, 4], [5]]

    二、mybatis 批量保存数据

    int batchInsert(List<Sku> list);
    
        <insert id="batchInsert"  parameterType="java.util.List">  
            insert into sku (  
            SKU_NO,  
            SOLD_TO,  
            HUB_ID,  
            SOLD_ALLOCATION,
            HUB_ALLOCATION  
            )  
            values  
            <foreach collection="list" item="sku" index="index" separator="," >  
              (  
                #{sku.skuNo,jdbcType=VARCHAR},  
                #{sku.soldTo,jdbcType=VARCHAR},  
                #{sku.hubId,jdbcType=VARCHAR},
                #{sku.soldAllocation,jdbcType=VARCHAR},  
                #{sku.hubAllocation,jdbcType=VARCHAR}
             )  
            </foreach>  
        </insert>  
  • 相关阅读:
    vtk体绘制时采样的起点使用噪声纹理来进行扰动
    转:轻松搞死VS
    虚拟华师(UDK)
    虚拟手术中的血流模拟(Physx+OpenGL)
    要找工作了,研究工作得暂停了
    MC+多个emitter成功把撕裂场景基本解决了
    鸭梨很大
    这世界好人多啊
    JS代码的格式化和压缩
    FusionCharts使用实例
  • 原文地址:https://www.cnblogs.com/lyon91/p/8961975.html
Copyright © 2011-2022 走看看