`
weiguo21
  • 浏览: 18649 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

一个方便的java分页算法

 
阅读更多
一个好用的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分页算法完整版本

    这个我人写的一个纯Java版的分页算法,与平台无关性,具有很好的通用性,同时附带完整的工程; 工程使用SQLServer2005,建表脚本在工程下的Setup中,根据你个人的数据库调整资源文件中的配置即可运行;同时这个算法...

    Java分页算法代码

    算法提取: 0.页码显示规则: 当前页为首页时不显示上一页; 上一页 1 2 3 … 20 下一页 当前页为尾页时不显示下一页; 上一页 1 … 17 18 19 20 下一页 1.页面总数(n) 显示全部页码:上一页 1 2 3 4 5 6 7 8...

    经典java分页算法

    这里我们将详细探讨如何实现一个简单的Java分页算法。 首先,我们需要定义两个核心的数据结构:`totalv` 和 `currentpagev`。`totalv` 是一个存储所有查询记录的向量(Vector),而 `currentpagev` 则用于存储当前...

    动态分页算法java代码

    以下是一个简单的Java代码示例,基于List实现动态分页: ```java public class Pagination { private int totalRecord; // 总记录数 private int pageSize; // 每页记录数 private int currentPage; // 当前页码...

    Java 分页算法祥解

    ----------=====Java 分页算法 =====------------ 1.Struts+JDBC分页算法 1.1 创建分页控制类(如果使用kevinb.jar可以省略本步) --创建接口Pageable.java --创建实现类PageableResultSet.java 使用以这个实现类来...

    分页算法java实现

    ### 分页算法在Java中的实现解析 #### 引言 分页是数据处理中的一个常见需求,尤其是在Web应用中,为了提升用户体验和减轻服务器压力,将大量数据分批展示是必要的。本文将深入分析一段Java代码,该代码实现了分页...

    JAVA大数据分页算法

    在大数据处理领域,分页算法是至关重要的,尤其是在Java编程环境下。当我们在处理大量数据时,一次性加载所有数据到内存可能会导致性能问题甚至内存溢出。因此,分页查询成为了一个有效的解决方案,它允许我们每次只...

    Java分页算法以及一点Apache CXF webservice 资料

    Java分页算法是Java开发中常见的一种技术,用于在大量数据中实现高效的浏览体验,尤其在Web应用中,用户通常需要浏览成百上千条记录,而一次性加载所有数据会导致性能下降,用户体验也会变得糟糕。因此,分页成为了...

    JAVA 大数据 ecside 分页 算法

    Eclipse Collections(简称ecside)是一个高性能、低开销的Java集合框架,它提供了一些高级功能,如分页算法,这对于处理大规模数据流非常有用。在这个主题中,我们将深入探讨如何利用Java和ecside进行大数据的分页...

    高效struts分页算法

    在Struts框架中,我们可以创建一个名为`PageBean`的Java Bean来存储和管理分页所需的信息。以下是一些关键属性: 1. `currentPage`: 当前页码,初始化为1。 2. `totalPages`: 总页数,根据总数据量和每页记录数计算...

    java分页int pageSize:每页显示多少条记录

    主要内容包括四个关键变量的定义及其作用、分页算法的计算逻辑、SQL查询语句的编写方法,以及一个简单的Java分页实现示例。 ### 四个关键变量 在进行分页时,我们需要定义以下四个变量: 1. **`int pageSize`**:...

    JAVA+servlet分页处理,JSP分页超级算法和页面

    在Java Web开发中,分页处理是一个非常常见的需求,它能有效地提高用户体验,尤其是在处理大量数据时。本主题主要探讨的是使用Java、Servlet以及JSP进行分页操作的方法和技术。以下将详细介绍这些技术及其背后的原理...

    java多线程分页查询

    首先通过执行一个统计查询语句获取总的记录数,为后续的分页提供依据。 - **步骤2:设置页面信息**。根据总记录数计算出总页数等相关信息,并设置当前页面的起始索引和结束索引。 - **步骤3:查询当前页数据**。使用...

    java万能分页代码

    这个3.0版本的分页代码库通常包含了一些经过优化的分页算法和接口,适用于各种场景,如JSP、Servlet以及现代的Java框架如Spring MVC。 在Java Web开发中,分页主要涉及到以下几个关键知识点: 1. **SQL查询分页**...

    java的struts分页算法的具体实现.txt

    java的struts分页算法的具体实现.txt

    jsp分页技术算法jsp分页技术算法

    本篇文章将深入探讨JSP中的分页算法,帮助开发者更好地理解和运用这一关键技能。 首先,理解分页的基本概念。分页是将大量的数据分割成多个小部分,每次只显示一部分,以提高页面加载速度和用户体验。在JSP中,我们...

    Java分页大全下载zip版

    Java分页技术是Web开发中的一个关键组成部分,尤其是在处理大数据量时,为了提高用户体验和系统性能,分页显得尤为重要。本资源"Java分页大全"集合了多种分页实现方式和最佳实践,对于Java Web开发者来说是一份宝贵...

    java--fenye-.rar_java_java分页_工具 java

    本资料包主要包含了一个Java分页工具的源码,有助于开发者理解和实现自己的分页解决方案。 首先,我们要理解分页的基本原理。在数据库查询中,通常会用到SQL的LIMIT和OFFSET关键字来实现分页。LIMIT用于指定每页...

    JAVA实现FIFO、LRU、OPT页面置换算法,有界面

    总之,这个项目为理解和实践页面置换算法提供了一个很好的平台,通过JAVA的实现和直观的界面,使得这些复杂的内存管理概念变得更加易于掌握。无论是计算机科学的学生还是专业的软件工程师,都可以从中受益,加深对...

    JSP+MYSQL+Java类优化分页的实例

    通过合理的数据库查询策略和分页算法,能够在不牺牲用户体验的前提下处理大量数据。此外,良好的代码结构和注释也有助于代码的可读性和维护性。在实际应用中,还可以进一步考虑性能优化,例如增加缓存机制或使用更...

Global site tag (gtag.js) - Google Analytics