用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;
}