一、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/zh-tw/n/243089.html