MyBatis批量插入为什么比单条插入块?_java批量插入底层是一条一条插入

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

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

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

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

    public boolean saveBatch(Collection<T> 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 {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值