一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了
package cn.com.base.common.pagination;
/**
* 分页基类
*
* @author cary
* @since 2013-1-23 下午3:03:32
*/
public class Pageable 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;
/**
* 表示项数未知(<code>Integer.MAX_VALUE</code>)
*/
public static final int UNKNOWN_ITEMS = Integer.MAX_VALUE;
/**
* 状态量
*/
private int page; // 当前页码
private int items; // 总共项数
private int itemsPerPage; // 每页项数。
private int startRow; // 开始条数
private int endRow;// 结束条数
/**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,默认每页显示<code>10</code>项
*/
public Pageable() {
this(0);
}
/**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,指定每页项数
*
* @param itemsPerPage 每页项数。
*/
public Pageable(int itemsPerPage) {
this(itemsPerPage, UNKNOWN_ITEMS);
}
/**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,指定每页项数
*
* @param itemsPerPage 每页项数
* @param items 总项数
*/
public Pageable(int itemsPerPage, int items) {
this.items = (items >= 0) ? items : 0;
this.itemsPerPage = (itemsPerPage > 0) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
this.page = calcPage(0);
}
/**
* 取得总页数。
*
* @return 总页数
*/
public int getPages() {
if (items <= 0) {
return 1;
}
return (int) Math.ceil((double) items / itemsPerPage);
}
/**
* 取得当前页。
*
* @return 当前页
*/
public int getPage() {
return page;
}
/**
* 设置并取得当前页
*
* @param page 当前页
* @return 设置后的当前页
*/
public int setPage(int page) {
return (this.page = calcPage(page));
}
/**
* 取得总项数。
*
* @return 总项数
*/
public int getItems() {
return items;
}
/**
* 设置并取得总项数。如果指定的总项数小于0,则被看作0
*
* @param items总项数
* @return 设置以后的总项数
*/
public int setItems(int items) {
this.items = (items >= 0) ? items : 0;
setPage(page);
return this.items;
}
/**
* 取得每页项数。
*
* @return 每页项数
*/
public int getItemsPerPage() {
return itemsPerPage;
}
/**
* 设置并取得每页项数。如果指定的每页项数小于等于0,则使用默认值<code>DEFAULT_ITEMS_PER_PAGE</code>
* 并调整当前页使之在改变每页项数前后显示相同的项
*
* @param itemsPerPage 每页项数
* @return 设置后的每页项数
*/
public int setItemsPerPage(int itemsPerPage) {
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;
}
/**
* 取得当前页的长度,即当前页的实际项数。相当于 <code>endIndex() - beginIndex() + 1</code>
*
* @return 当前页的长度
*/
public int getLength() {
if (page > 0) {
return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - 1));
} else {
return 0;
}
}
/**
* 取得首页页码。
*
* @return 首页页码
*/
public int getFirstPage() {
return calcPage(1);
}
/**
* 取得末页页码。
*
* @return 末页页码
*/
public int getLastPage() {
return calcPage(getPages());
}
/**
* 取得前一页页码。
*
* @return 前一页页码
*/
public int getPreviousPage() {
return calcPage(page - 1);
}
/**
* 取得前n页页码
*
* @param n 前n页
* @return 前n页页码
*/
public int getPreviousPage(int n) {
return calcPage(page - n);
}
/**
* 取得后一页页码。
*
* @return 后一页页码
*/
public int getNextPage() {
return calcPage(page + 1);
}
/**
* 取得后n页页码。
*
* @param n 后n面
* @return 后n页页码
*/
public int getNextPage(int n) {
return calcPage(page + n);
}
/**
* 判断指定页码是否被禁止,也就是说指定页码超出了范围或等于当前页码。
*
* @param page 页码
* @return boolean 是否为禁止的页码
*/
public boolean isDisabledPage(int page) {
return ((page < 1) || (page > getPages()) || (page == this.page));
}
/**
* 计算页数,但不改变当前页。
*
* @param page 页码
* @return 返回正确的页码(保证不会出边界)
*/
protected int calcPage(int page) {
int pages = getPages();
if (pages > 0) {
return (page < 1) ? 1 : ((page > pages) ? pages : page);
}
return 0;
}
/**
* 创建复本。
*
* @return 复本
*/
public Object clone() {
try {
return super.clone();
} catch (java.lang.CloneNotSupportedException e) {
return null; // 不可能发生
}
}
/**
* @param startRow the startRow to set
*/
public void setStartRow(int startRow) {
this.startRow = startRow;
}
/**
* @param endRow the endRow to set
*/
public void setEndRow(int endRow) {
this.endRow = endRow;
}
/**
* @return the startRow
*/
public int getStartRow() {
if (page > 0) {
startRow = (itemsPerPage * (page - 1)) + 1;
} else {
startRow = 0;
}
return startRow;
}
/**
* @return the endRow
*/
public int getEndRow() {
if (page > 0) {
endRow = Math.min(itemsPerPage * page, items);
} else {
endRow = 0;
}
return endRow;
}
}
分享到:
相关推荐
这个我人写的一个纯Java版的分页算法,与平台无关性,具有很好的通用性,同时附带完整的工程; 工程使用SQLServer2005,建表脚本在工程下的Setup中,根据你个人的数据库调整资源文件中的配置即可运行;同时这个算法...
算法提取: 0.页码显示规则: 当前页为首页时不显示上一页; 上一页 1 2 3 … 20 下一页 当前页为尾页时不显示下一页; 上一页 1 … 17 18 19 20 下一页 1.页面总数(n) 显示全部页码:上一页 1 2 3 4 5 6 7 8...
这里我们将详细探讨如何实现一个简单的Java分页算法。 首先,我们需要定义两个核心的数据结构:`totalv` 和 `currentpagev`。`totalv` 是一个存储所有查询记录的向量(Vector),而 `currentpagev` 则用于存储当前...
以下是一个简单的Java代码示例,基于List实现动态分页: ```java public class Pagination { private int totalRecord; // 总记录数 private int pageSize; // 每页记录数 private int currentPage; // 当前页码...
----------=====Java 分页算法 =====------------ 1.Struts+JDBC分页算法 1.1 创建分页控制类(如果使用kevinb.jar可以省略本步) --创建接口Pageable.java --创建实现类PageableResultSet.java 使用以这个实现类来...
### 分页算法在Java中的实现解析 #### 引言 分页是数据处理中的一个常见需求,尤其是在Web应用中,为了提升用户体验和减轻服务器压力,将大量数据分批展示是必要的。本文将深入分析一段Java代码,该代码实现了分页...
在大数据处理领域,分页算法是至关重要的,尤其是在Java编程环境下。当我们在处理大量数据时,一次性加载所有数据到内存可能会导致性能问题甚至内存溢出。因此,分页查询成为了一个有效的解决方案,它允许我们每次只...
Java分页算法是Java开发中常见的一种技术,用于在大量数据中实现高效的浏览体验,尤其在Web应用中,用户通常需要浏览成百上千条记录,而一次性加载所有数据会导致性能下降,用户体验也会变得糟糕。因此,分页成为了...
Eclipse Collections(简称ecside)是一个高性能、低开销的Java集合框架,它提供了一些高级功能,如分页算法,这对于处理大规模数据流非常有用。在这个主题中,我们将深入探讨如何利用Java和ecside进行大数据的分页...
在Struts框架中,我们可以创建一个名为`PageBean`的Java Bean来存储和管理分页所需的信息。以下是一些关键属性: 1. `currentPage`: 当前页码,初始化为1。 2. `totalPages`: 总页数,根据总数据量和每页记录数计算...
主要内容包括四个关键变量的定义及其作用、分页算法的计算逻辑、SQL查询语句的编写方法,以及一个简单的Java分页实现示例。 ### 四个关键变量 在进行分页时,我们需要定义以下四个变量: 1. **`int pageSize`**:...
在Java Web开发中,分页处理是一个非常常见的需求,它能有效地提高用户体验,尤其是在处理大量数据时。本主题主要探讨的是使用Java、Servlet以及JSP进行分页操作的方法和技术。以下将详细介绍这些技术及其背后的原理...
首先通过执行一个统计查询语句获取总的记录数,为后续的分页提供依据。 - **步骤2:设置页面信息**。根据总记录数计算出总页数等相关信息,并设置当前页面的起始索引和结束索引。 - **步骤3:查询当前页数据**。使用...
这个3.0版本的分页代码库通常包含了一些经过优化的分页算法和接口,适用于各种场景,如JSP、Servlet以及现代的Java框架如Spring MVC。 在Java Web开发中,分页主要涉及到以下几个关键知识点: 1. **SQL查询分页**...
java的struts分页算法的具体实现.txt
本篇文章将深入探讨JSP中的分页算法,帮助开发者更好地理解和运用这一关键技能。 首先,理解分页的基本概念。分页是将大量的数据分割成多个小部分,每次只显示一部分,以提高页面加载速度和用户体验。在JSP中,我们...
Java分页技术是Web开发中的一个关键组成部分,尤其是在处理大数据量时,为了提高用户体验和系统性能,分页显得尤为重要。本资源"Java分页大全"集合了多种分页实现方式和最佳实践,对于Java Web开发者来说是一份宝贵...
本资料包主要包含了一个Java分页工具的源码,有助于开发者理解和实现自己的分页解决方案。 首先,我们要理解分页的基本原理。在数据库查询中,通常会用到SQL的LIMIT和OFFSET关键字来实现分页。LIMIT用于指定每页...
总之,这个项目为理解和实践页面置换算法提供了一个很好的平台,通过JAVA的实现和直观的界面,使得这些复杂的内存管理概念变得更加易于掌握。无论是计算机科学的学生还是专业的软件工程师,都可以从中受益,加深对...
通过合理的数据库查询策略和分页算法,能够在不牺牲用户体验的前提下处理大量数据。此外,良好的代码结构和注释也有助于代码的可读性和维护性。在实际应用中,还可以进一步考虑性能优化,例如增加缓存机制或使用更...