MyBatis---BATCH批量提交数据
当需要更新数据库里大量数据时,可以用MyBatis里BATCH来批量提交数据,这样可以节省时间,代码如下。
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
private void addPerson(List<PersonDTO> updates) {
// 新获取一个模式为BATCH,自动提交为false的session
// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
//通过新的session获取mapper
PersonMapper perMapper = session.getMapper(PersonMapper.class);
try {
for (int i = 0; i < updates.size(); i++) {
perMapper.insert(updates.get(i));
if (i % 1000 == 0 || i == updates.size() - 1) {
//System.out.println("提交一次1000数据");
//手动每1000个一提交,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
}
还没有评论,来说两句吧...