mybatis plus实现queryWrapper 进行动态排除查询Column列,动态进行groupBy分组
@Override
public Page<OverviewReportModel> getOverviewReport(OverviewReq req) {
boolean dateFlag = Objects.nonNull(req.getStartTime()) && Objects.nonNull(req.getEndTime());
Page<OverviewReportModel> page = new Page<>(req.getCurrent(), req.getSize());
LambdaQueryWrapper<OverviewReportModel> queryWrapper = Wrappers.lambdaQuery(OverviewReportModel.class);
// 定义排除的列名
List<String> noSelected = new ArrayList<>();
if (!req.getIsDateGroup()){
noSelected.add("ymd");
}
if (!req.getIsCountryGroup()){
noSelected.add("country");
}
if (!req.getIsBundleGroup()){
noSelected.add("bundle");
}
// 进行select排除列判断
if (CollUtil.isNotEmpty(noSelected)) {
queryWrapper.select(item -> !noSelected.contains(item.getColumn()));
}
queryWrapper.eq(StrUtil.isNotBlank(req.getCountry()), OverviewReportModel::getCountry, req.getCountry())
.eq(StrUtil.isNotBlank(req.getBundle()), OverviewReportModel::getBundle, req.getBundle())
.eq(StrUtil.isNotBlank(req.getBundle()), OverviewReportModel::getBundle, req.getBundle())
.le(dateFlag, OverviewReportModel::getYmd, DateUtil.formatDate(req.getEndTime()))
.ge(dateFlag, OverviewReportModel::getYmd, DateUtil.formatDate(req.getStartTime()))
// 动态分组
.groupBy(req.getIsDateGroup(), OverviewReportModel::getYmd)
.groupBy(req.getIsBundleGroup(), OverviewReportModel::getBundle)
.groupBy(req.getIsCountryGroup(), OverviewReportModel::getCountry);
return overviewReportMapper.selectPage(page, queryWrapper);
}
Select排除项实现逻辑
定义一个列表来存储需要排除的列名,然后通过mybatis plus 的方法
default Children select(Predicate<TableFieldInfo> predicate)
进行排查项操作 ==>queryWrapper.select(item -> !noSelected.contains(item.getColumn()));