MyBatis批量插入为什么比单条插入块?

迈不过友情╰ 2023-09-28 02:56 158阅读 0赞

今天在利用excel处理业务数据的时候开始打算一条一条插入数据库!因为要做数据校验和数据保存返回id之后进行其他表也插入!大约有30000多条数据库吧!花了大约3-5分钟,前端也会出现超时请求问题、让我意识到一条一条插入影响性能,但是因为业务逻辑的需要,又不得不一条一条插入,后面改变了思维还是必须批量插入数据!并将其他表也需要保存的数据也临时存在Java对象中!在主对象保存之后进行遍历获取插入。

一条一条数据插入为什么会这么慢呢?如果是单条执行数据操作,比如有30000条数据,那么你得向数据库服务器发起30000次请求!如果使用批量插入就只需要发送一次请求。

其实就像前端发送http请求一样,在请求的时候消耗花费了很多时间。

直接看一下批量保存的源代码吧

  1. public boolean saveBatch(Collection<T> entityList, int batchSize) {
  2. String sqlStatement = this.sqlStatement(SqlMethod.INSERT_ONE);
  3. SqlSession batchSqlSession = this.sqlSessionBatch();
  4. Throwable var5 = null;
  5. try {
  6. int i = 0;
  7. for(Iterator var7 = entityList.iterator(); var7.hasNext(); ++i) {
  8. Object anEntityList = var7.next();
  9. batchSqlSession.insert(sqlStatement, anEntityList);
  10. if(i >= 1 && i % batchSize == 0) {
  11. batchSqlSession.flushStatements();
  12. }
  13. }
  14. batchSqlSession.flushStatements();
  15. return true;
  16. } catch (Throwable var16) {
  17. var5 = var16;
  18. throw var16;
  19. } finally {
  20. if(batchSqlSession != null) {
  21. if(var5 != null) {
  22. try {
  23. batchSqlSession.close();
  24. } catch (Throwable var15) {
  25. var5.addSuppressed(var15);
  26. }
  27. } else {
  28. batchSqlSession.close();
  29. }
  30. }
  31. }
  32. }

这里batchSqlSession.flushStatements()其实就是在做拼接SQL的操作!将单个插入的方法为每个实体组装一个insert 语句,然后执行数据库插入操作

发表评论

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

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

相关阅读