Mybatis两种不同批量插入方式的区别

目录

  • 前言
  • 测试
    • 拼接 sql
    • batch插入
  • 数据对比
    • 总结

      前言
      本文使用 Mybatis 进行批量插入,比较两种不同的插入方式的区别。
      【Mybatis两种不同批量插入方式的区别】
      测试
      批量插入注意事项:
      1、连接数据库时添加参数 allowMultiQueries=true,支持多语句执行,批处理
      2、数据库是否支持大量数据写入,设置 max_allowed_packet参数保证批次提交的数据量

      拼接 sql

      public void batchDemo() {long start = System.currentTimeMillis(); List list = new ArrayList<>(); for (int i = 0; i < 5000; i++) {User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); list.add(user); }userService.batchForeach(list); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); }

      insert intouser(id,`name`,pwd)values(#{user.id}, #{user.name}, #{user.pwd})


      batch插入

      public void batchInsert() {long start = System.currentTimeMillis(); SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH); UserService mapper = sqlSession.getMapper(UserService.class); for (int i = 0; i < 5000; i++) {User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); mapper.batchInsert(user); }sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + " ---------------"); }

      注意:batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的

      数据对比
      拼接sql (ms) batch插入 (ms)
      500条 1744 639
      2000条 26966 2473
      5000条 173668 7382


      总结 到此这篇关于Mybatis两种不同批量插入方式区别的文章就介绍到这了,更多相关Mybatis批量插入方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

        推荐阅读