栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

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

    public boolean saveBatch(Collection entityList, int batchSize) {
        String sqlStatement = this.sqlStatement(SqlMethod.INSERT_ONE);
        SqlSession batchSqlSession = this.sqlSessionBatch();
        Throwable var5 = null;

        try {
            int i = 0;

            for(Iterator var7 = entityList.iterator(); var7.hasNext(); ++i) {
                Object anEntityList = var7.next();
                batchSqlSession.insert(sqlStatement, anEntityList);
                if(i >= 1 && i % batchSize == 0) {
                    batchSqlSession.flushStatements();
                }
            }

            batchSqlSession.flushStatements();
            return true;
        } catch (Throwable var16) {
            var5 = var16;
            throw var16;
        } finally {
            if(batchSqlSession != null) {
                if(var5 != null) {
                    try {
                        batchSqlSession.close();
                    } catch (Throwable var15) {
                        var5.addSuppressed(var15);
                    }
                } else {
                    batchSqlSession.close();
                }
            }

        }
    }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号