用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进行大量数据插入时的注意事项,包括利用ignore关键字处理单条插入失败情况,通过foreach循环批量插入list集合,以及针对PostgreSql数据库的特殊优化策略,如分页拆分list避免参数超出范围错误。
1053

被折叠的 条评论
为什么被折叠?



