一、MybatisSaveBatch定义
1、MybatisSaveBatch是mybatis中用于批量保存数据的接口。使用MybatisSaveBatch可以大幅度提高数据保存的效率。MybatisSaveBatch接口方法定义如下:
/** * 批量保存或更新实体对象 * @param entityList 实体对象列表 * @param batchSize 每批次处理的数量,默认为1000 */ void saveBatch(@Param("entityList") List<T> entityList, @Param("batchSize") int batchSize);
2、其中entityList参数为待批量保存的实体对象列表,batchSize为每批次处理的数量,默认为1000。该接口方法返回值为空。
二、使用MybatisSaveBatch批量保存数据
1、使用MybatisSaveBatch批量保存数据非常简单,我们只需做两件事情:准备待保存的数据列表,调用MybatisSaveBatch接口方法即可。
2、下面我们以一个示例来演示如何使用MybatisSaveBatch批量保存数据:
// 准备待保存的数据列表 List<User> userList = new ArrayList<>(); for (int i = 0; i < 10000; i++) { User user = new User(); user.setUserName("user-" + i); user.setAge(RandomUtils.nextInt(18, 50)); user.setGender(RandomUtils.nextInt(0, 2)); user.setAddress(RandomStringUtils.randomAlphabetic(20)); user.setPhone(RandomStringUtils.randomNumeric(11)); userList.add(user); } // 调用MybatisSaveBatch接口方法批量保存数据 userMapper.saveBatch(userList);
3、以上示例中,我们首先准备了10,000条待保存的User实体对象,然后调用了userMapper.saveBatch(userList)方法保存数据。
三、如何优化MybatisSaveBatch性能
1、MybatisSaveBatch可以大幅度提高数据保存的效率,但是当数据量比较大时,性能问题就会凸显出来,下面我们介绍一些优化MybatisSaveBatch性能的方法。
四、设置statement缓存
1、设置statement缓存可以大幅度提高MybatisSaveBatch性能。由于MybatisSaveBatch接口方法是重复执行的,因此可以使用statement缓存功能将sql语句缓存起来,避免每次都编译sql语句。
2、设置statement缓存的方法非常简单,只需在mybatis配置文件中将"org.apache.ibatis.session.Configuration.localCacheScope"属性设置为"STATEMENT"即可。
<!-- mybatis配置文件 --> <configuration> <!-- statement缓存 --> <setting name="localCacheScope" value="STATEMENT"/> </configuration>
五、适当调整batchSize
1、batchSize是每批次处理的数量,默认为1000。适当调整batchSize可以提高MybatisSaveBatch性能。
2、batchSize的大小需要根据机器配置、数据库性能等因素综合考虑。batchSize过大会导致内存占用过高,batchSize过小会导致网络IO开销过大。
六、使用JDBC批量处理特性
1、JDBC提供了批量处理特性,可以大幅度提高批量保存数据的效率。
2、Mybatis在执行批量保存数据时可以使用JDBC的批量处理特性,只需将mybatis配置文件中的"useGeneratedKeys"属性设置为"false"即可。
<!-- mybatis配置文件 --> <configuration> <!-- 关闭useGeneratedKeys --> <setting name="useGeneratedKeys" value="false"/> </configuration>
3、以上配置可以让Mybatis使用JDBC的批量处理特性来保存数据,大幅度提高性能。
七、小结
1、本文介绍了MybatisSaveBatch的定义及基本用法。
2、我们也介绍了优化MybatisSaveBatch性能的方法,包括:设置statement缓存、适当调整batchSize、使用JDBC批量处理特性等。
3、使用MybatisSaveBatch可以大幅度提高数据保存的效率,但是在使用过程中需要注意一些性能优化的问题,以充分发挥MybatisSaveBatch的性能优势。