java分页计算_一个方便的java分页算法

package cn.com.base.common.pagination;/**

* 分页基类

*

* @author cary

* @since 2013-1-23 下午3:03:32*/

public classPageable implements java.io.Serializable {private static final long serialVersionUID = 1L;/**

* 每页默认的项数(10)*/

public static final int DEFAULT_ITEMS_PER_PAGE = 10;/**

* 滑动窗口默认的大小(7)*/

public static final int DEFAULT_SLIDER_SIZE = 7;/**

* 表示项数未知(Integer.MAX_VALUE)*/

public static final int UNKNOWN_ITEMS =Integer.MAX_VALUE;/**

* 状态量*/

private int page; //当前页码

private int items; //总共项数

private int itemsPerPage; //每页项数。

private int startRow; //开始条数

private int endRow;//结束条数

/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,默认每页显示10项*/

publicPageable() {this(0);

}/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,指定每页项数

*

* @param itemsPerPage 每页项数。*/

public Pageable(intitemsPerPage) {this(itemsPerPage, UNKNOWN_ITEMS);

}/**

* 创建一个分页器,初始项数为无限大UNKNOWN_ITEMS,指定每页项数

*

* @param itemsPerPage 每页项数

* @param items 总项数*/

public Pageable(int itemsPerPage, intitems) {this.items = (items >= 0) ? items : 0;this.itemsPerPage = (itemsPerPage > 0) ?itemsPerPage : DEFAULT_ITEMS_PER_PAGE;this.page = calcPage(0);

}/**

* 取得总页数。

*

* @return 总页数*/

public intgetPages() {if (items <= 0) {return 1;

}return (int) Math.ceil((double) items /itemsPerPage);

}/**

* 取得当前页。

*

* @return 当前页*/

public intgetPage() {returnpage;

}/**

* 设置并取得当前页

*

* @param page 当前页

* @return 设置后的当前页*/

public int setPage(intpage) {return (this.page =calcPage(page));

}/**

* 取得总项数。

*

* @return 总项数*/

public intgetItems() {returnitems;

}/**

* 设置并取得总项数。如果指定的总项数小于0,则被看作0

*

* @param items总项数

* @return 设置以后的总项数*/

public int setItems(intitems) {this.items = (items >= 0) ? items : 0;

setPage(page);return this.items;

}/**

* 取得每页项数。

*

* @return 每页项数*/

public intgetItemsPerPage() {returnitemsPerPage;

}/**

* 设置并取得每页项数。如果指定的每页项数小于等于0,则使用默认值DEFAULT_ITEMS_PER_PAGE

* 并调整当前页使之在改变每页项数前后显示相同的项

*

* @param itemsPerPage 每页项数

* @return 设置后的每页项数*/

public int setItemsPerPage(intitemsPerPage) {int tmp = this.itemsPerPage;this.itemsPerPage = (itemsPerPage > 0) ?itemsPerPage : DEFAULT_ITEMS_PER_PAGE;if (page > 0) {

setPage((int) (((double) (page - 1) * tmp) / this.itemsPerPage) + 1);

}return this.itemsPerPage;

}/**

* 取得当前页的长度,即当前页的实际项数。相当于 endIndex() - beginIndex() + 1

*

* @return 当前页的长度*/

public intgetLength() {if (page > 0) {return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - 1));

}else{return 0;

}

}/**

* 取得首页页码。

*

* @return 首页页码*/

public intgetFirstPage() {return calcPage(1);

}/**

* 取得末页页码。

*

* @return 末页页码*/

public intgetLastPage() {returncalcPage(getPages());

}/**

* 取得前一页页码。

*

* @return 前一页页码*/

public intgetPreviousPage() {return calcPage(page - 1);

}/**

* 取得前n页页码

*

* @param n 前n页

* @return 前n页页码*/

public int getPreviousPage(intn) {return calcPage(page -n);

}/**

* 取得后一页页码。

*

* @return 后一页页码*/

public intgetNextPage() {return calcPage(page + 1);

}/**

* 取得后n页页码。

*

* @param n 后n面

* @return 后n页页码*/

public int getNextPage(intn) {return calcPage(page +n);

}/**

* 判断指定页码是否被禁止,也就是说指定页码超出了范围或等于当前页码。

*

* @param page 页码

* @return boolean 是否为禁止的页码*/

public boolean isDisabledPage(intpage) {return ((page < 1) || (page > getPages()) || (page == this.page));

}/**

* 计算页数,但不改变当前页。

*

* @param page 页码

* @return 返回正确的页码(保证不会出边界)*/

protected int calcPage(intpage) {int pages =getPages();if (pages > 0) {return (page < 1) ? 1 : ((page > pages) ?pages : page);

}return 0;

}/**

* 创建复本。

*

* @return 复本*/

publicObject clone() {try{returnsuper.clone();

}catch(java.lang.CloneNotSupportedException e) {return null; //不可能发生

}

}/**

* @param startRow the startRow to set*/

public void setStartRow(intstartRow) {this.startRow =startRow;

}/**

* @param endRow the endRow to set*/

public void setEndRow(intendRow) {this.endRow =endRow;

}/**

* @return the startRow*/

public intgetStartRow() {if (page > 0) {

startRow= (itemsPerPage * (page - 1)) + 1;

}else{

startRow= 0;

}returnstartRow;

}/**

* @return the endRow*/

public intgetEndRow() {if (page > 0) {

endRow= Math.min(itemsPerPage *page, items);

}else{

endRow= 0;

}returnendRow;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
熟悉项目开发过程中SSM框架、JSP、Mysql使用,知道各技术之间的如何衔接; 考虑到部分学生只需要学习前台(买家)或是后台(后台),故将电商系统分为电商系统前台和电商系统后台两个项目, 当前课程包含电商系统前台和电商系统后台 该课程主要涉及到的技术有:  项目涉及的技术:  1、前端:jsp、css、javascript、jQuery(js框架)、bootstrap框架 2、后台:Spring MVC、Spring、Mybatis框架、javaMail进行邮件发送、jstl 、jstl自定义分页标签、代码生成器等 3、数据库:Mysql 4、服务器:Tomcat项目开发涉及的功能: 1、项目以及数据库搭建 2、用户登录、退出3、用户注册、邮件发送、以及用户信息激活4、首页商品信息页面搭建以及查询功能实现5、查询商品明细6、加入商品至购物车、删除、更新、清除购物车商品信息7、确认订单信息8、订单页面搭建以及下订单功能实现9、查询我的购物车以及订单信息10、商品明细查看,商品修改,商品下架11、商品类型管理12、订单管理13、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值