• Mybatisplus的savebatch伪批量剖析


    一、源码

    今天工作听同事说mybatis-plus的saveBatch方法是伪批量,底层实现是一个一个插入。用了这么久的saveBatch方法,竟然.....

    不追根溯源不是我小糖的风格哇,赶紧扒一波源码分析一哈

    mybatis-plus的saveBatch方法是ServiceImpl类实现的,源码如下:

    定睛一看果然有一个for循环在处理传递的集合实体,依次插入数据库 batchSqlSession.insert(sqlStatement, anEntityList)

    二、执行流程

    看完了源码准备实验一波,看下执行的sql的日志

    //lists中有2005 
    this.saveBatch(lists);

    mybtis-plus的日志

    mysql的日志

    自动提交改为0
    然后多行insert语句
    最后提交事务

    由mysql的日志,可以得出结论,确实是一条一条插入数据库的,那这样插入效率可真是令人担忧。

    三、优化

    网上大部分都有说对于saveBatch的慢插入效率还是可以提升的,在数据库连接上做以下配置:

    url: jdbc:mysql://127.0.0.1:3306/photo?rewriteBatchedStatements=true

    在加完rewriteBatchedStatements=true参数之后,看下saveBatch的sql执行日志

    mybatis-plus的日志还是跟上面一样

    mysql的日志:

    它是先将自动提交改为0
    然后将1000条数据组成一批(一个insert语句)来执行
    最后提交事务,autocommit改为1

    好了,到这里分析完毕!!!!

  • 相关阅读:
    XSS 防御方法总结
    IE浏览器兼容方案
    js 排序算法
    webapck 打包体积优化策略
    webapck 速度优化策略
    Grunt、Gulp和Webpack对比
    数据库中的undo日志、redo日志
    使用sysbench对mysql压力测试
    java -cp & java jar的区别
    使用BenchmarkSQL测试PostgreSQL
  • 原文地址:https://www.cnblogs.com/chcha1/p/16340254.html
Copyright © 2020-2023  润新知