yml配置SQL开启批处理:
&rewriteBatchedStatements=true
url: jdbc:mysql://ip:3306/xxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
代码:
@Autowired
private SupplierInfoMapper SupplierInfoMapper;
@Autowired
private SqlSessionFactory sqlSessionFactory;
/**
* 批处理 - ExecutorType 插入数据库
*/
private void processInsert(List<SupplierInfo> supplierInfoList) {
// 打开批处理
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
SupplierInfoMapper mapper = session.getMapper(SupplierInfoMapper.class);
int length = supplierInfoList.size();
for (int i = 0; i < length; i++) {
mapper.insert(supplierInfoList.get(i));
//每1000条提交一次防止内存溢出
if ((i + 1) % 1000 == 0) {
session.commit();
session.clearCache();
}
}
session.commit();
session.clearCache();
}
效率能大大提升,万条数据也是秒级