java 分页器_Java EE之分页器设计

由于数据库实训的课程设计,在做项目过程中,需要使项目更加规范的结构和各层间责任分离。无疑地,分页器是其中之一。

1. 本文仅陈述分页器如何实现,关于分页器的其他概念,请自行搜索其他网络资源。

2. 关于如何在各层使用使用PageBean,见本文引用文献3

一、设计实现

/**

* 分页器

* @author Zen Johnny

* @date 2017年11月11日 下午1:19:32

* @notice sql demo:SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

*/

package com.cpms.entity.vo;

import java.util.Collections;

import java.util.List;

public class Pager {

/**

* 存放当前页的数据

*/

private List entitys;

/**

* 每页行数(记录数),默认为10

*/

private int pageSize;

/**

* 默认的每页记录数为10(用于缺省构造器,无set方法)

*/

private static final int DEFAULT_PAGE_SIZE = 10;

/**

* 总行数(总记录数)

*/

private int totalRows;

/**

* 总页数

*/

private int totalPage;

/**

* 当前页数,默认为第一页

*/

private int curPage = 1;

/**

* 前一页

*/

private int prePage;

/**

* 后一页

*/

private int nextPage;

/**

* 数据库开始的指针

* limit begin,offset 中 的m

*/

private int beginCursor;

/**

* 数据库查询记录时候的偏移量

* limit begin,offset 中 的 offset

*/

private int offsetCursor;

/**

* constructor

*/

public Pager() {

this(0, DEFAULT_PAGE_SIZE, 0, Collections.EMPTY_LIST);

}

/**

* constructor

*/

public Pager(int curPage, int pageSize, int totalRows,List entitys) {

this.entitys = entitys;

//↓先得设置总记录和每个页面的记录数,才有办法知道【总页数】等属性

this.totalRows = totalRows;

setPageSize(pageSize);

//↓注意:1.条件:总记录数totalRows和每页记录数pageSize 2.此处计算非常容易产生精度损失

setTotalPage();

//↓条件:总页数totalPage

setCurPage(curPage);

//↓条件:当前页码curPage和每页记录数pageSize

setBeginCursor();

//↓条件:每页记录数pageSize

setOffsetCursor();

//↓条件:当前页页码curPage

setPrePage();

//↓条件:当前页页码curPage和总页数totalPage

setNextPage();

}

public List getEntitys() {

return entitys;

}

/**

* 设置当前页面数据对象,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setEntitys(List entitys) {

this.entitys = entitys;

}

public int getPageSize() {

return pageSize;

}

/**

* 设置页面大小,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setPageSize(int pageSize) {

if(pageSize < 1) {

pageSize = DEFAULT_PAGE_SIZE;

}else {

this.pageSize = pageSize;

}

}

public static int getDefaultPageSize() {

return DEFAULT_PAGE_SIZE;

}

public int getTotalRows() {

return totalRows;

}

/**

* 设置页总记录数,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setTotalRows(int totalRows) {

if(totalRows < 1)

this.totalRows = 0;

else

this.totalRows = totalRows;

}

public int getTotalPage() {

return totalPage;

}

/**

* 设置总页面数,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setTotalPage() {

this.totalPage = (int) Math.ceil((double)totalRows/pageSize);

}

public int getCurPage() {

return curPage;

}

public void setCurPage(int curPage) {

if(curPage < 1)

this.curPage = 1;

else if(curPage > totalPage)

this.curPage = totalPage;

else

this.curPage = curPage;

}

public int getPrePage() {

return prePage;

}

private void setPrePage() {

this.prePage = curPage - 1;

if(this.prePage < 1) //注意:this.prePage[当前]

this.prePage = 1;

}

public int getNextPage() {

return nextPage;

}

/**

* 设置下一页页码,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setNextPage() {

this.nextPage = curPage + 1;

if(this.nextPage > totalPage)//注意:this.nextPage[当前]

this.nextPage = totalPage;

}

public int getBeginCursor() {

return beginCursor;

}

/**

*设置数据库查询记录时的起始游标,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setBeginCursor() {

this.beginCursor = (curPage - 1) * pageSize;

}

public int getOffsetCursor() {

return offsetCursor;

}

/**

*设置数据库查询记录时的游标偏移量,私有,对外屏蔽,防止破坏分页器各属性的一致性

*/

private void setOffsetCursor() {

this.offsetCursor = pageSize;

}

/**

* 是否还有上一页

*/

public boolean hasPrePage() {

if(this.prePage == 1) {

return false;

}

return true;

}

/**

* 是否还有下一页

*/

public boolean hasNextPage() {

if(this.nextPage == this.totalPage) {

return false;

}

return true;

}

@Override

public String toString() {

return "Pager [entitys=" + entitys + ", pageSize=" + pageSize + ", totalRows=" + totalRows + ", totalPage="

+ totalPage + ", curPage=" + curPage + ", prePage=" + prePage + ", nextPage=" + nextPage

+ ", beginCursor=" + beginCursor + ", offsetCursor=" + offsetCursor + "]";

}

}

91248de0d1d1aedc85ebde8d3dbc9423.png

二、参考文献

1.[强大的 java 分页器]http://blog.csdn.net/hcmdy/article/details/25251911

2.[java--分页查询接口设计及分页器的实现]http://blog.csdn.net/u011659172/article/details/18231509

3.[Java Web(十一) 分页功能的实现]https://www.cnblogs.com/whgk/p/6474396.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值