自定义分页工具类

PageHelper结合PageInfo实现分页BUG:例如:pageNum 为 1 ,pageSize 为 10。
原始数据为15条,中间不做数据处理应该返回两页,总共15条数据。

如果我对该原始数据中间做了数据处理返回新的集合后有13条数据,我们想要的结果是两页,共13条数据,但返回的是一页 ,共十条数据。为什么呢?因为PageInfo是在PageHelper查询结果的基础上进行的分页操作,如果我中间做了数据处理返回了新的集合,PageInfo和PageHelper其实操作的并不是同一个集合。

所以PageHelper结合PageInfo实现分页只有在这两个类同时处理一个集合数据时才会生效

package rongheng.sales.utils;

import java.io.Serializable;
import java.util.List;

public class PageInfoUtil<T> implements Serializable {
    /**
     * 总个数
     */
    private int total;
    /**
     * 总页数
     */
    private int pages;
    /**
     * 每页展示多少条数据
     */
    private int pageSize;
    /**
     * 第几页
     */
    private int pageNum;
    /**
     * 分页返回的集合信息
     */
    private List<T> list;

    public PageInfoUtil() {
    }

    public PageInfoUtil(List<T> list) {
        this.total = list.size();
        this.list = list;
    }

    public void startPage(int pageNum, int pageSize) {
        pageSize = pageSize > 0 ? pageSize : 10;
        this.pages = (int) Math.ceil((double) this.total / pageSize);
        pageNum = pageNum > 0 ? pageNum : 1;
        pageNum = pageNum > pages ? 1 : pageNum;
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        int startIndex = (pageNum - 1) * pageSize;
        int toIndex = startIndex + pageSize;
        if (toIndex > total) {
            setList(list.subList(startIndex, total));
        } else {
            setList(list.subList(startIndex, toIndex));
        }
    }


    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

使用示例

public PageInfoUtil<HashMap<String, Object>> queryExportProduct(@RequestParam Integer pageNum, @RequestParam Integer pageSize, String fuzzyQuery) {
        List<HashMap<String, Object>> list = productService.queryExportProduct(fuzzyQuery);
        PageInfoUtil pageInfo = new PageInfoUtil(list);
        pageInfo.startPage(pageNum, pageSize);
        return pageInfo;
    }
posted @ 2022-01-20 23:22  暮雨寒冬  阅读(256)  评论(0编辑  收藏  举报