一、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的性能优势。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/243089.html
微信扫一扫
支付宝扫一扫