MyBatis---BATCH批量提交数据

阳光穿透心脏的1/2处 2024-04-08 10:48 139阅读 0赞

当需要更新数据库里大量数据时,可以用MyBatis里BATCH来批量提交数据,这样可以节省时间,代码如下。

  1. @Autowired
  2. private SqlSessionTemplate sqlSessionTemplate;
  3. private void addPerson(List<PersonDTO> updates) {
  4. // 新获取一个模式为BATCH,自动提交为false的session
  5. // 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
  6. SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
  7. //通过新的session获取mapper
  8. PersonMapper perMapper = session.getMapper(PersonMapper.class);
  9. try {
  10. for (int i = 0; i < updates.size(); i++) {
  11. perMapper.insert(updates.get(i));
  12. if (i % 1000 == 0 || i == updates.size() - 1) {
  13. //System.out.println("提交一次1000数据");
  14. //手动每1000个一提交,提交后无法回滚
  15. session.commit();
  16. //清理缓存,防止溢出
  17. session.clearCache();
  18. }
  19. }
  20. } catch (Exception e) {
  21. //没有提交的数据可以回滚
  22. session.rollback();
  23. } finally {
  24. session.close();
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读