常用的分页处理方法
采用pagehelper处理分页,分页的逻辑只对调用执行的SQL有效,若出现了有多条sql,或者需要采用openfeign跨服务调用其他微服务的接口,采用pagehelper就会出现只会显示pagesize的页数。出现这种问题时,需要手动封装total,保证total的准确性。为了避免出现分页出现的问题,手动封装了分页方法。
PageHelper.startPage(currentPage, pageSize);
List<PreDesignMonthSchedule> scheduleList = reportService.getPreReviewScheduleList(year, userId, requestType, currentPage, pageSize);
logger.info("查询的月度计划数据为:" + scheduleList);
if(!CollectionUtils.isEmpty(scheduleList)){
return new R(new PageInfo<>(scheduleList));
}else{
return R.fail("该用户不是省公司账户");
}
自行进行分页封装处理
public class BeanUtil {
public static <T> PagedResult<T> createPageData(List<T> list, Integer pageNo, Integer pageSize) {
pageNo = pageNo==null ? 1:pageNo;
pageSize = pageSize==null ? 20:pageSize;
Integer length = pageSize * pageNo;
Integer start = pageSize * (pageNo-1);
PagedResult<T> result = new PagedResult<>();
List<T> pList = new ArrayList<T>();
for(int i = start; i<(length>list.size()?list.size():length); i++){
if(list.get(i)!=null)
pList.add(list.get(i));
}
result.setPageNum(pageNo);
result.setPageSize(pageSize);
result.setDataList(pList);
result.setTotalCount(list.size());
result.setPageCount(getPages(list.size(), pageSize));
return result;
}
public static Integer getPages(int size,int pageSize){
return size/pageSize + (size%2==0?0:1);
}
}
调用分页处理
BeanUtil.createPageData(scheduleProList,scheduleProDTO.getCurrentPage(),scheduleProDTO.getPageSize())
本文探讨了在使用PageHelper进行分页处理时遇到的问题,当存在多条SQL或跨服务调用时,PageHelper可能无法正确显示总页数。为了解决这个问题,作者建议并详细介绍了如何手动封装分页方法,以确保分页数据的准确性。
5万+





