当新增数据过多,用foreach 批量插入时,可能会报出标题的错误。
原因是:在mysql的my.ini配置文件中“max_allowed_packet” 的值小于插入的值。
解决方法1:增加mysql的my.ini配置max_allowed_packet的值,
方法2:java层面处理。将插入的值List切分成多个list然后在foreach插入
public static<T> List<List<T>> subList(List<T> oldList, int pageSize){
List<List<T>> collect = IntStream.range(0, (oldList.size() + pageSize - 1) / pageSize)
.map(pageNum -> pageNum * pageSize).parallel()
.mapToObj(i -> oldList.stream().skip(i).limit(pageSize).collect(Collectors.toList()))
.collect(Collectors.toList());
return collect;
}
方法3:mybatis层面,可以使用mybatis的batch方式插入数据库
获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)