【page分页工具类】贼好用的分页工具类

本文介绍了如何使用Java的PageUtils工具类实现高效的后端分页。从DAO层的Mapper方法到Controller层的处理,重点讲解了Controller层的请求参数处理和服务层如何调用DAO获取条数。当数据量为0时直接返回,否则通过PageUtils设置总条数、计算分页信息,并返回分页对象,同时清除查询参数。
摘要由CSDN通过智能技术生成
  • PageUtils工具类如下:
package utils;

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

/**
 * @author 类此够
 * @Description 分页工具类,贼好用的分页工具类
 */
public class PageUtils implements Serializable {
   
    public static void main(String[] args) {
   
//        PageUtils p = new PageUtils();
//        p.setPageIndex(1); // 当前页
//        // p.setStart(0); // 起始条数
//        p.setLimit(10); // 每页条数
//        p.setParam("name", "xiaohei");
//        /*
//         * 只需要根据param查询总条数设置一下, 其他字段:例如共多少页,是否有下一页,是否有上一页,当前页多少条,字段自动会根据totalCount算出;
//         */
//        p.setTotalCount(20);
//
//        p.clearParam();
//		System.out.println(JSON.toJSONString(p));
    }

    private static final long   serialVersionUID = 1L;

    private int                 pageIndex;                                       // 当前页
    private int                 start;                                           // 起始条数
    private int                 limit;                                           // 每页显示条数
    private int                 totalCount;                                      // 总条数

    // 以下参数只能算, 不能有setXX方法---start
    // 根据param参数查询出totalCount, 计算设置
    private int                 totalPage;                                       // 总页数
    private int                 totalCountPageIndex;                             // 当前页有多少条
    private boolean             hasNextPage;                                     // 是否有下一夜
    private boolean             hasLastPage;                                     // 是否有上一夜
    // 以下参数只能算, 不能有setXX方法---end

    private String              sortName;                                        // 排序字段
    private String              sortOrder;                                       // 排序方式:(ASC/DESC)
    private Map<String, Object> queryParam       = new HashMap<String, Object>();
    private List<?>             data;

    public Map<String, Object> getParam() {
   
        // 校验部分参数合理性
        if ((this.start < 0) || (this.pageIndex <= 0) || (this.limit <= 0)) {
   // 参数错误, (为最首页准备)
            throw new RuntimeException("请检查入参 start / pageIndex / limit !");
        }
        
        // 如果既有start且start>0, 又有pageIndex, 则优先取start, 且不再做分页处理(已传start, 则本意就是指定查多少条)
        if (this.start == 0) {
   
            this.start = (this.pageIndex - 1) * this.limit;
        } else {
   
            queryParam.put("pageIndex", "-999"); // 已传start>0
        }
        
        queryParam.put("start", this.start);
        queryParam.put("limit", this.limit);
        queryParam.put("sortName", this.sortName);
        queryParam.put("sortOrder", this.sortOrder);
        return queryParam;
    }

    public int getTotalCount() {
   
        return totalCount;
    }

    /**
     * @author 类此够
     * @param
     * @return 
     * @description 
     * 设置总条数, 同时计算是否有上下页
     */
    public void setTotalCount(int totalCount) {
   
        if (totalCount == 0) {
   
            return;
        }

        if ((totalCount > 0) && (this.start >= totalCount)) {
   
            System.out.println("start: " + start + ", pageIndex: " + pageIndex + ", limit: " + limit + ", totalCount: " + totalCount);
            throw new RuntimeException("请检查入参!");
        }
        this
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值