Mybatis批量插入大量数据

用Mybatis插入大量数据的注意事项:

<insert id="insetList" parameterType="java.util.List"  >
    insert ignore into application (proposalno, policyno
    )
    <foreach collection="list" item="item" index="index" separator=",">
      ( #{item.proposalno},
      #{item.policyno}
        )
    foreach>
  insert>

1.使用ignore关键字,单条插入失败时会跳过。
2.使用foreach关键字,可以循环插入的list,list里的每条记录配置名item。
3.如果插入PostgreSql,由于数据量过大,可能报错:Tried to send an out-of-range integer as a 2-byte。
因为它的sql语句是insert into table(a,b) values (?,?), (?,?) (?,?) (?,?) (?,?)…这样的。所以带入的参数过
多会报错。需要拆分list,按照分页来写。
下面是拆分原list为分页list的方法。

private void splitList(){
        List<List<T>> tmplist=new ArrayList<>();
        for (int i = 0; i < pageCount-1; i++) {
            //开始位置
            int startIndex= (int) (i*this.perPage);
            //结束位置
            int endIndex= (int) ((i+1)*this.perPage<this.totalCount?(i+1)*this.perPage:this.totalCount);
            tmplist.add(this.data.subList(startIndex,endIndex));

        }
        this.newPageList=tmplist;

    }

你可能感兴趣的:(Mybatis)