使用场景:
当业务较为复杂,需要将sql查询出来的信息再进行处理时,分页插件由于只对sql语句分页,则无法使用,这时候就需要对sql查询信息再处理之后的list进行分页。
代码:
可直接复制作为方法使用,将DTO改成需要进行分页的所属实体类
/**
* 分页函数
*
* @param pageNum 当前页数
* @param pageSize 每一页的数据条数
* @param list 要进行分页的数据列表
* @return 当前页要展示的数据
* @author yeMao
*/
private PageResult<List<DTO>> getPages(Integer pageNum, Integer pageSize, List<DTO> list) {
Page page = new Page();
if (list == null) {
return null;
}
int size = list.size();
if (pageSize > size) {
pageSize = size;
}
if (pageSize != 0) {
// 求出最大页数,防止currentPage越界
int maxPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;
if (pageNum > maxPage) {
pageNum = maxPage;
}
}
// 当前页第一条数据的下标
int curIdx = pageNum > 1 ? (pageNum - 1) * pageSize : 0;
List<DTO> pageList = new ArrayList();
// 将当前页的数据放进pageList
for (int i = 0; i < pageSize && curIdx + i < size; i++) {
pageList.add(list.get(curIdx + i));
}
page.setPageNum(pageNum).setPageSize(pageSize).setTotal(list.size());
PageResult<List<DTO>> pageResult = new PageResult<>(page.getPageNum(), page.getPageSize(), page.getTotal(), pageList);
return pageResult;
}