使用pageHelper分页的时候,原理是在查询sql的时候进行limit分页,但是在业务中,查询出来的数据有时候需要使用stream流进行处理,
PageUtils.startPage(pageNum, pageSize);
List<VO> list = transportToolService.listByCondition(dto);
//没有流操作的情况下不会出现分页错误
collect =list.stream().filter().map().collect(Collectors.toList);
return new PageUtils<>(list);
处理后再使用PageInfo封装会导致总页数不正确,需要手动分页。使用下面的工具类解决:
package com.ruoyi.common.utils;
import java.util.ArrayList;
import java.util.List;
/**
* File: PagingUtil
* Author:
* Description: 手动分页(解决流操作分页
*/
public class PagingUtil<T> {
private Integer pageNum;
private Integer pageSize;
public void startPage(int pageNum, int pageSize) {
this.pageNum = pageNum;
this.pageSize = pageSize;
}
/**
* 手动分页
*
* @param collect 流处理后的集合
* @return PageUtils<T>
*/
public PageUtils<T> manualPaging(List<T> collect) {
List<T> resultList = new ArrayList<>();
int startIndex = (pageNum - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, collect.size());
for (int i = startIndex; i < endIndex; i++) {
resultList.add(collect.get(i));
}
// 计算总页数
int totalPages = collect.size() % pageSize == 0 ? collect.size() / pageSize : collect.size() / pageSize + 1;
// 封装分页结果
PageUtils<T> utils = new PageUtils<>(collect);
utils.list = resultList;
utils.curPage = pageNum;
utils.pageSize = pageSize;
utils.totalCount = collect.size();
utils.totalPages = totalPages;
return utils;
}
}
若依自带的分页工具(需要pagehelper依赖):
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.utils.sql.SqlUtil;
import java.util.List;
/**
* 分页工具类
*
* @author ruoyi
*/
public class PageUtils<T> extends PageHelper
{
/**
* 当前页
*/
public int curPage;
/**
* 每页数量
*/
public int pageSize;
/**
* 总数量
*/
public int totalCount;
/**
* 总页数
*/
public int totalPages;
/**
* 返回集合
*/
public List<T> list;
public PageUtils() {
}
public PageUtils(List<T> list) {
PageInfo<T> ePageInfo = new PageInfo(list);
this.curPage = ePageInfo.getPageNum();
this.pageSize = ePageInfo.getPageSize();
this.totalCount = (int) ePageInfo.getTotal();
this.totalPages = ePageInfo.getPages();
this.list = ePageInfo.getList();
//清除上下文
PageHelper.clearPage();
}
/**
* 设置请求分页数据
*/
public static void startPage()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
Boolean reasonable = pageDomain.getReasonable();
PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
}
/**
* 设置请求分页数据
*/
public static Page startPage(int pageNum,int pageSize)
{
return PageHelper.startPage(pageNum, pageSize);
}
/**
* 清理分页的线程变量
*/
public static void clearPage()
{
PageHelper.clearPage();
}
}