content: package com.admin4j.framework.mp.service;
  
  import org.springframework.transaction.annotation.Transactional;
  
  import java.util.Collection;
  
  /**
   * 写接口
   * CRQS 模式。读写分离
   *
   * @author andanyang
   * @since 2023/8/17 11:00
   */
  public interface ICommandBatchService<T> {
  
  
      /**
       * 插入（批量）
       *
       * @param entityList 实体对象集合
       */
      @Transactional(rollbackFor = Exception.class)
      boolean saveBatch(Collection<T> entityList);
  
  
      /**
       * 插入（批量）
       *
       * @param entityList 实体对象集合
       * @param batchSize  插入批次数量
       */
      boolean saveBatch(Collection<T> entityList, int batchSize);
  
  
      /**
       * 批量修改插入
       *
       * @param entityList 实体对象集合
       */
      @Transactional(rollbackFor = Exception.class)
      boolean saveOrUpdateBatch(Collection<T> entityList);
  
  
      /**
       * 批量修改插入
       *
       * @param entityList 实体对象集合
       * @param batchSize  每次的数量
       */
      boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
  
      //---------------------------------------------------------------- update ------------------------
  
  
      /**
       * 根据ID 批量更新
       *
       * @param entityList 实体对象集合
       */
      @Transactional(rollbackFor = Exception.class)
      boolean updateBatchById(Collection<T> entityList);
  
      /**
       * 根据ID 批量更新
       *
       * @param entityList 实体对象集合
       * @param batchSize  更新批次数量
       */
      boolean updateBatchById(Collection<T> entityList, int batchSize);
  
  
      //---------------------------------------------------------------- remove ------------------------
  
      /**
       * 删除（根据ID 批量删除）
       *
       * @param list 主键ID或实体列表
       */
      boolean removeByIds(Collection<?> list);
  
      /**
       * 批量删除
       *
       * @param list    主键ID或实体列表
       * @param useFill 是否填充(为true的情况,会将入参转换实体进行delete删除)
       * @return 删除结果
       * @since 3.5.0
       */
      @Transactional(rollbackFor = Exception.class)
      boolean removeByIds(Collection<?> list, boolean useFill);
  
      /**
       * 批量删除(jdbc批量提交)
       *
       * @param list 主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)
       * @return 删除结果
       * @since 3.5.0
       */
      @Transactional(rollbackFor = Exception.class)
      boolean removeBatchByIds(Collection<?> list);
  
      /**
       * 批量删除(jdbc批量提交)
       *
       * @param list      主键ID或实体列表
       * @param batchSize 批次大小
       * @return 删除结果
       * @since 3.5.0
       */
      @Transactional(rollbackFor = Exception.class)
      boolean removeBatchByIds(Collection<?> list, int batchSize);
  
  
      /**
       * 批量删除(jdbc批量提交)
       *
       * @param list    主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)
       * @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)
       * @return 删除结果
       * @since 3.5.0
       */
      @Transactional(rollbackFor = Exception.class)
      boolean removeBatchByIds(Collection<?> list, boolean useFill);
  
  
      /**
       * 批量删除(jdbc批量提交)
       *
       * @param list      主键ID或实体列表
       * @param batchSize 批次大小
       * @param useFill   是否启用填充(为true的情况,会将入参转换实体进行delete删除)
       * @return 删除结果
       * @since 3.5.0
       */
      boolean removeBatchByIds(Collection<?> list, int batchSize, boolean useFill);
  }
  