Q&A:之前写了一个项目,用PageHelper进行分页。分页后中途换了PageInfo中存储的List数据,分页数据就丢失了。因为调用PageHelper.startPage()进行分页,然后紧挨着的这个Mapper语句就会进行分页,紧接着new PageInfo<>(),放入该分页后的数据的集合,这样便会正常的获得分页数据信息。而为了修改返回数据,将该list进行了切换,导致分页数据获取异常,解决方法如下:
public PageInfo findXxxx(xxxx){
PageHelper.startPage(pageNumber, pageSize);
List<Xxxx> list = xxxMapper.selectByXxxx(xxx);
PageInfo tempPageInfo = new PageInfo<>(list);
//进行你的操作获得新的list
List<XxxxVO> newList = new ArrayList();
......
//将tempPageInfo中存储的分页信息赋值给新的PageInfo,并把新的newList 存储到新的PageInfo中
return newPage(tempPageInfo,newList);
}
private static <T> PageInfo newPage(PageInfo old,List<T> newList){
PageInfo<T> pageInfo = new PageInfo<>();
pageInfo.setList(newList);
pageInfo.setPageNum(old.getPageNum());
pageInfo.setTotal(old.getTotal());
pageInfo.setPageSize(old.getPageSize());
pageInfo.setSize(old.getSize());
pageInfo.setEndRow(old.getEndRow());
pageInfo.setStartRow(old.getStartRow());
pageInfo.setPages(old.getPages());
pageInfo.setPrePage(old.getPrePage());
pageInfo.setNextPage(old.getNextPage());
pageInfo.setIsFirstPage(old.isIsFirstPage());
pageInfo.setIsLastPage(old.isIsLastPage());
pageInfo.setHasPreviousPage(old.isHasPreviousPage());
pageInfo.setHasNextPage(old.isHasNextPage());
pageInfo.setNavigatePages(old.getNavigatePages());
pageInfo.setNavigatepageNums(old.getNavigatepageNums());
pageInfo.setNavigateFirstPage(old.getNavigateFirstPage());
pageInfo.setNavigateLastPage(old.getNavigateLastPage());
return pageInfo;
}