批处理,mybatis有2中方式
1 foreach
2 batch
分析下batch存在的问题
SqlSession session = sqlSessionTemplate.getSqlSessionFactory()
.openSession(ExecutorType.BATCH, false);
InspectTemplateMapper inspectTemplateMapper = session.getMapper(InspectTemplateMapper.class);
//设置每次提交的数量
int size = insertList.size();
int count =0 ;
//这里要多线程处理(4个线程的线程池)
try {
for (int i = 0; i < size; i++) {
inspectTemplateMapper.insertSelective(insertList.get(i));
count++;
if (i % 1000 == 0 ) {
// 手动每1000个一提交,提交后无法回滚
session.commit();
// 清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
// 没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
return count;
这里我用的自增主键,每次事物提交,会报出java.sql.BatchUpdateExceptio