一、MyBatis-Plus 批量插入原理 在MyBatis-Plus 中,批量插入使用的是 JDBC 的批处理方式,即将多条 SQL 语句打包发送给数据库一次性执行,这种方式可以减少数据库与应用之间的网络传输次数,提高数据插入的效率。 具体实现方式如下: 1. 使用 PreparedStatement 对象预编译插入语句; 2. 使用 addBatch() 方法向批处理列...
1. 工作原理 insertBatchSomeColumn方法通过构建预处理语句(PreparedStatement)来实现批量插入。在执行批量插入时,数据库会优化执行计划,减少网络和数据库的开销,从而提高了插入的效率。 2. 使用场景 大量数据插入:当你需要插入大量数据时,使用批量插入可以显著提高性能。 选择性插入:有时我们只需要插入数据表的某些列,使...
Mybatis-Plus中默认的批量保存方法saveBatch,底层是通过sqlSession.flushStatements()将一个个单条插入的insert语句分批次进行提交。 相比遍历集合去调用userMapper.insert(entity),执行一次提交一次,saveBatch批量保存有一定的性能提升,但从sql层面上来说,并不算是真正的批量插入。 补充: 遍历集合单次提交...
MyBatis-Plus 批量更新的原理基本和其批量插入的原理一致,都是调用 executeBatch 执行批处理操作。 4. 优缺点分析 4.1 批量插入 对于批量插入,MyBatis 拼接 SQL 的写法比 MyBatis-Plus 的批量插入方法有明显更高的性能。 但在开启批处理优化之后,MyBatis-Plus 的方法性能更高了。
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码) <insert id="batchInsert" parameterType="java.util.List"> ...
新增基类 Mapper,注意这个基类中的批量插入方法名称要和 InsertBatchSomeColumn#getMethod() 方法返回的字符串一致,也就是 insertBatchSomeColumn 具体做法读者请参考 MyBatis-plus 自定义通用方法及其实现原理,本文不再赘述 经过以上配置,最终具体的业务类 Mapper 只要继承新增的基类 Mapper 就具备了批量插入的功能,笔者...
批量插入或更新,每500条数据提交一次。 存在就根据主键更新,不存在就插入。 IService接口的saveOrUpdate(T entity)方法 @Override public Boolean addUser(User user) { return this.saveOrUpdate(user); } 存在就根据主键更新,不存在就插入。 BaseMapper接口的insert(T entity)方法 @Override public Boolean addUse...
除了基本的insert操作,MyBatis Plus还提供了许多扩展的功能,如批量插入、插入忽略重复、插入选择性等。这些功能都是基于insert操作进行的扩展,提供了更为灵活和便捷的数据插入方式。 总之,MyBatis Plus的insert操作是一项重要的数据持久化操作。通过深入理解MyBatis Plus的insert原理,我们可以更好地使用和定制这个框架,并...
BatchExecutor:这种执行器类型用于批量操作,它会在内部缓存所有的更新操作,然后在适当的时候一次性执行它们,适合批量插入或更新操作的场景,可以显著提高性能。 除了这三种基本的执行器类型,MyBatis 还提供了其他一些执行器,这里暂时不展开讨论。 在本文中,执行到doUpdate(ms, parameter)时,会默认跳转到SimpleExecutor执行...