一个好用的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 = ; /**
* 滑动窗口默认的大小(7)
*/
public static final int DEFAULT_SLIDER_SIZE = ; /**
* 表示项数未知(<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();
} /**
* 创建一个分页器,初始项数为无限大<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 >= ) ? items : ;
this.itemsPerPage = (itemsPerPage > ) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
this.page = calcPage();
} /**
* 取得总页数。
*
* @return 总页数
*/
public int getPages() {
if (items <= ) {
return ;
}
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 >= ) ? items : ;
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 > ) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
if (page > ) {
setPage((int) (((double) (page - ) * tmp) / this.itemsPerPage) + );
}
return this.itemsPerPage;
} /**
* 取得当前页的长度,即当前页的实际项数。相当于 <code>endIndex() - beginIndex() + 1</code>
*
* @return 当前页的长度
*/
public int getLength() {
if (page > ) {
return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - ));
} else {
return ;
}
}
/**
* 取得首页页码。
*
* @return 首页页码
*/
public int getFirstPage() {
return calcPage();
} /**
* 取得末页页码。
*
* @return 末页页码
*/
public int getLastPage() {
return calcPage(getPages());
} /**
* 取得前一页页码。
*
* @return 前一页页码
*/
public int getPreviousPage() {
return calcPage(page - );
} /**
* 取得前n页页码
*
* @param n 前n页
* @return 前n页页码
*/
public int getPreviousPage(int n) {
return calcPage(page - n);
} /**
* 取得后一页页码。
*
* @return 后一页页码
*/
public int getNextPage() {
return calcPage(page + );
} /**
* 取得后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 < ) || (page > getPages()) || (page == this.page));
} /**
* 计算页数,但不改变当前页。
*
* @param page 页码
* @return 返回正确的页码(保证不会出边界)
*/
protected int calcPage(int page) {
int pages = getPages(); if (pages > ) {
return (page < ) ? : ((page > pages) ? pages : page);
} return ;
} /**
* 创建复本。
*
* @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 > ) {
startRow = (itemsPerPage * (page - )) + ;
} else {
startRow = ;
}
return startRow;
} /**
* @return the endRow
*/
public int getEndRow() {
if (page > ) {
endRow = Math.min(itemsPerPage * page, items);
} else {
endRow = ;
}
return endRow;
} }

版权声明:本文为博主原创文章,未经博主允许不得转载。

一个方便的java分页算法的更多相关文章

  1. java分页算法,传入当前pageIndex,pageSise,dataTotal可计算出页面上显示的页码,和是否启动上一页下一页

    public class CalculationPage { private Boolean showStartPagerDot; private Boolean showEndPagerDot; p ...

  2. java分页算法

    int totalPageNum = (totalRecord  +  pageSize  - 1) / pageSize;

  3. Java 分页之最简单的算法

    分页实现有很多方式,如jQuery自带框架pagination或在java封装一个类pager等.   下写一个简单易懂的分页算法   逻辑:   // 步骤1:设置每页页数大小 long pageS ...

  4. Java中常见的分页算法

    在查询数据的时候或者展示数据的时候经常会使用分页,介绍几种简单的分页算法: //总的页数 int total = 30: //每页个数 int pageSize = 6; 1.one     int ...

  5. 浅谈Java分页技术

    话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount; ...

  6. 分享一个完整的Mybatis分页解决方案

    Mybatis 的物理分页是应用中的一个难点,特别是配合检索和排序功能叠加时更是如此. 我在最近的项目中开发了这个通用分页器,过程中参考了站内不少好文章,阅读源码帮助更大minglisoft.cn/t ...

  7. 史上最全的java随机数生成算法分享(转)

    这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...

  8. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  9. Java基础算法集50题

    最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...

随机推荐

  1. javascript变量作用域 — 全局变量

    javascript中,如果没有用var 声明一个变量,则该变量会被自动创建在全局作用域中,即使你是在某个函数中创建的,它也会成为全局变量,从而可以被另一个函数调用.

  2. nodejs中https请求失败,无报错

    今天群里一位同学在做练习的时候,采用https例子: // curl -k https://localhost:8000/ const https = require('https'); const ...

  3. OpenACC 梯度下降法求解线性方程的优化

    ▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...

  4. 任务计划程序-Windows2008定时重启

    参考网站:https://www.cnblogs.com/yeyun/p/6209540.html Windows系统的任务计划程序,可以添加计划任务,设置任务开始时间及执行的间隔,实现应用的自动执行 ...

  5. JAVA 读取配置文件 xxx.properties

    package config_demo; import java.io.InputStream; import java.util.Properties; public class UrlDemo { ...

  6. leetcode235

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  7. Activity服务类-8 RuntimeService服务类

    一共89个接口1.启动流程实例(20个方法)//使用给定的键在流程定义的最新版本中启动一个新的流程实例.ProcessInstance startProcessInstanceByKey(String ...

  8. curl 请求https内容,返回空

    $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);/ ...

  9. ccttp图片处理过程

    1.python输出404的图片 #!/usr/bin/python # coding: utf-8 import psycopg2 import sys from datetime import * ...

  10. Python中的操作符重载

    运算符重载是指在方法中拦截内置的操作----当类的实例出现在内置操作中,Python会自动调用自定义的办法,并且返回自定义方法的操作结果.     类可以重载python的操作符 操作符重载使我们的对 ...