1.问题及解决方案
开发中遇到了,两个表查询然后进行分页的要求,原来写的代码都是单表查询进行分页,demo如下:
public MeituanBillListVo list(MeituanBillListParam param) {
// 参数校验
param = this.checkMeituanBillListParam(param);
// 查询分页数据
Page<MeituanBillEntity> pageData = meituanBillDao.listByCondsAndPage(
buildQueryConds(param),
param.getPageNumber(),
param.getPageSize());
// 返回值
return this.mockMeituanBillListVo(pageData);
}
private MeituanBillListParam checkMeituanBillListParam(MeituanBillListParam param) {
MeituanBillListParam newParam = new MeituanBillListParam();
// 参数校验
Validator.notNull(param, "参数错误", param);
// 可选参数校验::页码
Integer pageNumber = param.getPageNumber();
Integer pageSize = param.getPageSize();
if ((pageNumber == null) || (pageNumber <= 0)) {
newParam.setPageNumber(1);
} else {
newParam.setPageNumber(pageNumber);
}
if ((pageSize == null) || (pageSize <= 0)) {
newParam.setPageSize(20);
} else {
newParam.setPageSize(pageSize);
}
// 可选参数校验::没有查询条件提前返回
if (param.getConditions() == null) {
return newParam;
}
// 可选参数校验::待查询的账期列表
List<String> periodList = param.getConditions().getPeriodList();
if ((periodList != null) && (periodList.size() > 0)) {
newParam.getConditions().setPeriodList(periodList);
}
// 可选参数校验::排序字段校验
String orderBy = param.getConditions().getOrderBy();
String orderDir = param.getConditions().getOrderDir();
if (StringUtils.isNotBlank(orderBy) && StringUtils.isNotBlank(orderDir)) {
if (!meituanBillDao.checkEntityProp(new MeituanBillEntity(), orderBy)) {
log.warn("======>[MeituanBillManageServiceImpl::list] 排期字段参数错误: {}", param);
BizExceptionUtil.throwBusinessException(ErrorCodeEnum.SYS_PARAM_ERROR.getCode(), "参数错误");
}
List<String> neededOrderDirList = Arrays.asList("ASC", "DESC");
if (!neededOrderDirList.contains(orderDir.toUpperCase())) {
log.warn("======>[MeituanBillManageServiceImpl::list] 排期方向参数错误: {}", param);
BizExceptionUtil.throwBusinessException(ErrorCodeEnum.SYS_PARAM_ERROR.getCode(), "参数错误");
}
newParam.getConditions().setOrderBy(orderBy);
newParam.getConditions().setOrderDir(orderDir);
} else {
newParam.getConditions().setOrderBy("bill_period");
newParam.getConditions().setOrderDir("DESC");
}
return newParam;
}
default Page<T> listByCondsAndPage(LambdaQueryWrapper<T> conds, Integer pag