Skip to content

批量操作

MybatisBatchUtil 内置了批量保存,批量修改,批量其他操作

batchSave 批量保存

java
/**
 * 批量插入(表自增的,无法获取主键ID)
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchSave(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list) {
     
}

batchSave 批量保存2

java
/**
 * 批量插入(batchSize!=1时,无法获取主键)
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param batchSize         一次批量处理的条数(如需获取主键,请设置为1)
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchSave(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list, int batchSize) {
     
}

batchUpdate 批量修改

java
/**
 * 批量更新
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchUpdate(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list) {
     
}

batchUpdate 批量修改2

java
/**
 * 批量更新
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param batchSize         一次批量处理的条数
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchUpdate(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list, int batchSize) {
     
}

batch批量-核心方法

java
/**
 * 批量操作
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param batchSize         一次批量处理的条数
 * @param batchFunction     操作方法
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batch(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list, int batchSize, MybatisBatchBiConsumer<SqlSession, M, T> batchFunction) {
     
}

batchMultiSave批量+原生批量保存

java
/**
 * 批量原生插入操作,一次多组分隔后的数据
 * 默认是原生100条 然后10个原生插入
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchMultiSave(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list) {
     
}

batchMultiSave批量+原生批量保存2

java
/**
 * 批量原生插入操作,一次多组分隔后的数据
 * 默认是原生100条 然后10个原生插入
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param batchSize         一次批量处理的条数
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchMultiSave(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list, int batchSize, int subBatchSize) {
     
}

batchMulti批量+原生批量

java
/**
 * 批量分批操作,一次多组分隔后的数据
 *
 * @param sqlSessionFactory mybatis SqlSessionFactory 通过spring 注解注入获取
 * @param mapperType        Mapper 的 class 可以是 MybatisMapper 或 BasicMapper 或子类
 * @param list              数据列表
 * @param batchSize         一次批量处理的条数
 * @param batchFunction     操作方法
 * @param <M>               Mapper 实例
 * @param <T>               数据的类型
 * @return 影响的条数
 */
public static <M, T> int batchMulti(SqlSessionFactory sqlSessionFactory, Class<M> mapperType, Collection<T> list, int batchSize, int subBatchSize, MybatisBatchBiConsumer<SqlSession, M, List<T>> batchFunction) {
     
}

如何使用批量操作

java
List<IdTest> list = new ArrayList<>(10000);
for (int i = 0; i < 10000; i++) {
    IdTest idTest = new IdTest();
    idTest.setCreateTime(LocalDateTime.now());
    list.add(idTest);
}

MybatisBatchUtil.batchSave(sqlSessionFactory, IdTestMapper.class, list);

sqlSessionFactory 是mybatis SqlSessionFactory 可通过spring 依赖注入获得

IdTestMapper 是mybatis Mapper 接口

如需获取主键,可设置batchSize=1,虽然性能可能下降,也比一般的循环save,update快!