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) -> {
// 業務邏輯代碼
});
浙公網安備 33010602011771號