FunctionalInterface~一个批量处理数据的类

主要使用了一个委托的方式 ,函数式接口,将需要处理的业务逻辑以参数的方式传到方法里,而批量处理的方法代码比较固定,所以进行了抽象。

/**
 * 数据处理辅助类.
 */
public class DataHelper {
   static Logger logger = LoggerFactory.getLogger(DataHelper.class);

  /**
   * 分页处理逻辑.
   *
   * @param total
   * @param mapper
   * @param query
   * @param consumer
   * @param <T>
   */
  public static <T> void fillDataByPage(int total,
                                        int pageSize,
                                        BaseMapper<T> mapper,
                                        QueryWrapper<T> query,
                                        Consumer<T> consumer) {
      Integer totalPage = total / pageSize;

      if (totalPage > pageSize && totalPage % pageSize != 0) {
          totalPage++;
      }
      for (int i = 1; i <= totalPage; i++) {
          IPage<T> pages = mapper.selectPage(
                  new Page<>(i, pageSize), query);
          List<T> list = pages.getRecords();
          for (T item : list) {
              consumer.accept(item);
          }
          logger.info("【当前数据页:{}/{}】", i, pageSize);
      }
  }
}

业务层在使用批量大数据处理时,可以直接调用这个fillDataByPage方法,它们只关注自己的业务逻辑即可。

 QueryWrapper<UserAccountSet> actRuExecutionQueryWrapper = new QueryWrapper<>();
        actRuExecutionQueryWrapper.eq("AccountState", 0);
        Integer total = userAccountSetDao.selectCount(actRuExecutionQueryWrapper);

        DataHelper.fillDataByPage(total, DATA_PAGE_SIZE, userAccountSetDao, actRuExecutionQueryWrapper, (userAccountSet) -> {
           // 业务逻辑代码            
        });
posted @ 2021-04-29 10:47  张占岭  阅读(209)  评论(0编辑  收藏  举报