用于项目分页显示的分页对象简介

public class PageModel {
    //基本属性
    private int currentPageNum;          //当前页数,由用户指定
    private int pageSize = 5;            //每页显示的条数,固定的
    private int totalRecords;            //总记录条数,数据库查出来的
    private int totalPageNum;            //总页数,计算出来的
    private int startIndex;              //每页开始记录的索引,计算出来的
    private int prePageNum;              //上一页
    private int nextPageNum;             //下一页

    private List list;//已经分好页的结果集,该list中只有10条记录

    //扩展属性
    //一共每页显示9个页码按钮
    private int startPage;//开始页码
    private int endPage;//结束页码

    //完善属性
    private String url;

    //要想使用我的分页,必须给我两个参数。一个是要看哪一页,另一个是总记录条数
    public PageModel(int currentPageNum, int totalRecords, int pageSize) {
        this.currentPageNum = currentPageNum;
        this.totalRecords = totalRecords;
        this.pageSize = pageSize;

        //计算查询记录的开始索引
        startIndex = (currentPageNum - 1) * pageSize;
        //计算总页数
        totalPageNum = totalRecords % pageSize == 0 ? (totalRecords / pageSize) : (totalRecords / pageSize + 1);

        startPage = currentPageNum - 4;
        endPage = currentPageNum + 4;  
        //看看总页数够不够9页
        if (totalPageNum > 9) {
            //超过了9页
            if (startPage < 1) {
                startPage = 1;
                endPage = startPage + 8;
            }
            if (endPage > totalPageNum) {
                endPage = totalPageNum;
                startPage = endPage - 8;
            }
        } else {
            //不够9页
            startPage = 1;
            endPage = totalPageNum;
        }
    }
}

这个分页对象每页显示9个页码,以当前页为中心,向前显示4个,向后显示4个。

currentPageNum

当前页的页码,一般由前端传参获得。

pageSize

每页显示的条数

totalRecords

查询条目的总记录数,一般从数据库中查询count(*)获得

totalPageNum

当前条目查询出的总页数,一般通过公式计算获得。如:总页数对每页条数取余,若取余为0,则总页数 = 总记录数/每页条数;若不为0,总页数 = (总记录数/每页条数)+1。

startIndex

每页开始的记索引,如:每页显示3条。
查询语句查第1页就是select * from table limit 0,3
起始索引就是limit后第一个数,数据库记录下标从0开始,0,3就是从0开始数3条,查询出0,1,2三条记录。
查第2页就是select * from table limit 3,3
3,3就是从0开始数3条,查询出3,4,5三条记录。
起始索引:(当前页 - 1 )* 每页条数
比方第一页就是 1 - 1 * 3 = 0
第二页就是 2 - 1 * 3 = 3

prePageNum nextPageNum

上一页,下一页

list

存放查询出的当前分页结果

startPage endPage

最前页和最末页

这里需要特殊处理

        startPage = currentPageNum - 4;
        endPage = currentPageNum + 4;  
        //看看总页数够不够9页
        if (totalPageNum > 9) {
            //超过了9页
            if (startPage < 1) {
                startPage = 1;
                endPage = startPage + 8;
            }
            if (endPage > totalPageNum) {
                endPage = totalPageNum;
                startPage = endPage - 8;
            }
        } else {
            //不够9页
            startPage = 1;
            endPage = totalPageNum;
        }

最前页等于当前页-4
最末页等于当前页+4
如果总页数大于9,说明要特殊处理前页和末页。先处理小页码的问题,比如共有37条记录,每页3条,第13页只有1条记录。访问第2页,2-4等于-2,需要对前页置1,末页等于前页+8.
然后处理大页码的问题,比如还是这个例子,比如访问第11页,11+4=15页超出了末页13,需要将末页置为13,然后前页等于末页-8。
最后是不够9页的情况,前页置1,末页值最大页数。
以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值