1、PageHelper分页不生效
- 问题描述:
列表查询,前端传的参数为pageNum=1,pageSize=10,后端也成功接收了,但debug可以发现,返回的List中不止10条数据,如下图所示列表页展示了超过10条数据,分页不生效:
- 原因分析:
请看PageHepler官方文档FQA第一个
在我的代码中,设置PageHelper的分页参数后,调用了参数封装的方法this.packageSearchCondition(request,httpRequest),在这个方法中List userRegionList = getUserRegionUtil.getUserRegions(httpRequest)查询了数据库,所以这里才是上面说到的“第一个 Mybatis 的查询”,即PageHelper帮我把这个查询结果分页了,而对于this.baseMapper.selectList(lambdaQueryWrapper)则不再起作用。
@Override
public DcResponse findVipUnitCity(VipUnitRequest request, HttpServletRequest httpRequest) {
PageHelper.startPage(request.getPageNum(),request.getPageSize());
LambdaQueryWrapper<VipUnitCity> lambdaQueryWrapper =this.packageSearchCondition(request,httpRequest);
List<VipUnitCity> list = this.baseMapper.selectList(lambdaQueryWrapper);
for (VipUnitCity o:list) {
if(StringUtils.isNotBlank(o.getEnterpriseRegion())){
BaseRegion baseRegion = new BaseRegion();
baseRegion.setRegionId(o.getEnterpriseRegion());
List<BaseRegion> baseRegions = regionExtMapper.findBaseRegion(baseRegion);
if(CollectionUtils.isNotEmpty(baseRegions)){
o.setEnterpriseRegion(baseRegions.get(0).getRegionName());
}
}
}
return DcResponse.ok(new PageInfo<>(list));
}
/**
* 组装查询条件
* @param request
* @return
*/
private LambdaQueryWrapper<VipUnitCity> packageSearchCondition(VipUnitRequest request,HttpServletRequest httpRequest ){
LambdaQueryWrapper<VipUnitCity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if(StringUtils.isNotBlank(request.getEnterpriseName())){
lambdaQueryWrapper.like(VipUnitCity::getEnterpriseName,request.getEnterpriseName());
}
if(StringUtils.isNotBlank(request.getEnterpriseRegion())){
lambdaQueryWrapper.eq(VipUnitCity::getEnterpriseRegion,request.getEnterpriseRegion());
} else {
List<String> userRegionList = getUserRegionUtil.getUserRegions(httpRequest);
lambdaQueryWrapper.in(CollectionUtils.isNotEmpty(userRegionList),VipUnitCity::getEnterpriseRegion,userRegionList);
}
if(StringUtils.isNotBlank(request.getEnterpriseOwnerName())){
lambdaQueryWrapper.like(VipUnitCity::getEnterpriseOwnerName,request.getEnterpriseOwnerName());
}
if(StringUtils.isNotBlank(request.getEnterpriseJob())){
lambdaQueryWrapper.eq(VipUnitCity::getEnterpriseJob,request.getEnterpriseJob());
}
lambdaQueryWrapper.orderByDesc(VipUnitCity::getCreateTime);
return lambdaQueryWrapper;
}
- 解决方案:
具体问题具体分析,我这里只需要将代码调换顺序即可解决
@Override
public DcResponse findVipUnitCity(VipUnitRequest request, HttpServletRequest httpRequest) {
LambdaQueryWrapper<VipUnitCity> lambdaQueryWrapper =this.packageSearchCondition(request,httpRequest);
PageHelper.startPage(request.getPageNum(),request.getPageSize());
List<VipUnitCity> list = this.baseMapper.selectList(lambdaQueryWrapper);
for (VipUnitCity o:list) {
if(StringUtils.isNotBlank(o.getEnterpriseRegion())){
BaseRegion baseRegion = new BaseRegion();
baseRegion.setRegionId(o.getEnterpriseRegion());
List<BaseRegion> baseRegions = regionExtMapper.findBaseRegion(baseRegion);
if(CollectionUtils.isNotEmpty(baseRegions)){
o.setEnterpriseRegion(baseRegions.get(0).getRegionName());
}
}
}
return DcResponse.ok(new PageInfo<>(list));
}