当需要更新数据库里大量数据时,可以用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();
}
}
本文介绍了如何利用MyBatis的BATCH执行模式批量插入数据,以提高效率并避免内存溢出。通过设置SqlSession的自动提交为false,每1000条数据提交一次,并在提交后清理缓存,确保了数据操作的性能和稳定性。
923

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



