一、源码(后附使用说明)
package com.zhiyou100.crm.util;
/**
* 分页功能
* @author YangXianSheng
*
*/
public class Pager { //当前页码
int pageNo; //传过来
//每页数据条数
int pageSize; //传过来
//总数据条数
int total; //传出来
//总页数
int pageCount; //算过来
//最多页码数
int showPageNos; //传出来
//起始页码
int start; //算出来
//结束页码
int end; //算出来 /**
* 分页类
* @param pageNo 当前页码
* @param total 总数据条数
* @param pageSize 每页数据条数
* @param showPageNos 最多显示的页码数
*/
public Pager(int pageNo, int total, int pageSize, int showPageNos) {
this.pageNo = pageNo;
this.total = total;
this.pageSize = pageSize;
this.showPageNos = showPageNos;
valid();
calc();
} /**
* 分页类
* @param pageNo 当前页码
* @param total 总数据条数
*/
public Pager(int pageNo, int total) {
//在构造方法中通过this()调用其他构造方法
this(pageNo,total,5,3);
} /**
* 实现计算的方法
*/
private void calc() { pageCount=total%pageSize==0 ? total/pageSize : total/pageSize+1; //检查pageNo
if(pageNo>pageCount) pageNo = pageCount; //计算start、end
start = end =pageNo;
while (end-start+1 < showPageNos && (start >1 || end <pageCount) ) {
if (start>1) start--;
if(end <pageCount) end++;
} } @Override
public String toString() {
return "Pager [pageNo=" + pageNo + ", pageSize=" + pageSize + ", total=" + total + ", pageCount=" + pageCount
+ ", showPageNos=" + showPageNos + ", start=" + start + ", end=" + end + "]";
} public static void main(String[] args) { Pager pager =new Pager(16, 1000);
System.out.println(pager); Pager pager2 =new Pager(3, 1003);
System.out.println(pager2); } private void valid() {
if(pageNo<1) throw new PagerException("pageNo",1);
if(pageSize<1) throw new PagerException("pageSize",1);
if(total<0) throw new PagerException("total",1);
if(showPageNos<1) throw new PagerException("showPageNos",1); if(total ==0)System.err.println("警告:数据总条数为0!"); } public class PagerException extends RuntimeException{ private static final long serialVersionUID = 1L; public PagerException(String property,int minValue) {
super(String.format("分页参数%S不能小于%d。", property,minValue));
}
} /**
* 获取当前页码
* @return 当前页码
*/
public int getPageNo() {
return pageNo;
} /**
* 获取每页数据条数
* @return 每页数据条数
*/
public int getPageSize() {
return pageSize;
} /**
* 获取数据总条数
* @return 数据总条数
*/
public int getTotal() {
return total;
} /**
* 获取数据总页数
* @return 数据总页数
*/
public int getPageCount() {
return pageCount;
} /**
* 获取最多显示页码数
* @return 最多显示页码数
*/
public int getShowPageNos() {
return showPageNos;
} /**
* 获取起始页码
* @return 起始页码
*/
public int getStart() {
return start;
} /**
* 获取结束页码
* @return 结束页码
*/
public int getEnd() {
return end;
} }


二、使用说明:本案例是在Eclipse环境中测试运行,首先将包名进行修改成自己的包名,其次建立的时候将类命名为Pager

三、Pager类的设计

Pager类的职责: 根据pageNo、total、pageSize、showPageNos计算pageCount、start、end

这些数据用来支持在页面上显示分页信息和页码:

如下所示:

共123条数据,第3页/共13页
                  1  2  3
 4  5  6  7  8  9

区分哪些数据时传过来的,哪些数据是算出来的

将传过来的数据当做构造方法的参数

根据参数的变化频率调整参数的位置(Eclipse重构功能支持)

将变化频率高的参数放

四、数据分页的必要性

1.一次性把所有数据(如果很多的话)从数据库中查出来回给数据带来很大的IO开销,而IO是最慢的操作,结果是数据库并发了大大降低!

2.一次性把大量的数据从数据库传到应用服务器,再从应用服务器传到用户浏览器会大大占用服务器宝贵的带宽资源,导致服务器能够处理请求大大减少!

3.查询和传送大量数据需要时间必然很长,结果导致页面反应速度变慢

用户体验变差

4.人类可读的数据不超过几十条,传送成百上千条数据没有意义

分页数据的查询

pageNo  页码(从1开始)

pageSize 每页条数(默认10条)

能够计算出来任意pageNo对应的数据的起始索引位置

start =(pageNo-1)*pageSize    -----起始索引位置

count = pageSize             -----数据条数

Java中分页功能源码实例的更多相关文章

  1. 出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码)

    出售Illustrator脚本插件面板(包含面板源码,以及面板上所有的功能源码) 购买后可提供相应的小修改,以及教你使用往这个多列面里再加上按钮功能! 这套源码可作为工作使用,也可用为新手学习AI脚面 ...

  2. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  3. java中List的用法和实例详解

    java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...

  4. java中注解的使用与实例 (二)

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

  5. 【转】java中注解的使用与实例

    原文:http://www.cnblogs.com/pepcod/archive/2013/02/20/2918719.html java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单. ...

  6. [转]Java中的对象和对象引用实例浅析

    在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别 ...

  7. Java中list<Object>集合去重实例

    一:Java中list去重的方法很多,下面说一下其中一种方法:把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中: 二:实例 这里需要注意的是:使用c ...

  8. java中输出流OutputStream 类应用实例(转)

    OutputStream类该类是字节输出流的抽象类,定义了输出流的各种操作方法.这些方法的说明如表1所示.下面通过实例介绍如何使用OutputStream类向控制台输出字符串信息.步骤如下.(1)创建 ...

  9. Java中的Unicode与码点

    Java中,可以用\uXXXX表示Unicode字符,例如String s = "\u00X1";XXXX必须为4位,因此码点为U+1D546的字符,需要用两个编码单元表示,例如S ...

随机推荐

  1. NGUI和UGUI动画不能设置alpha值的问题

    动画播放alpha参数改变但无实际画面效果,原因是要挂一个脚本,设置实时更新数据. NGUI void Update() { widget.SetDirty(); } UGUI void Update ...

  2. 分布式ID生成方案

    系统唯一ID是设计一个系统的时候常常会遇到的问题,也常常为这个问题而纠结. 生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略. 0. 分布式ID要求 ...

  3. python—networkx:在一张图中画出多个子图

    通过plt.subplot能够在一张图中画出多个子图 #coding: utf-8 #!/usr/bin/env python """ Draw a graph with ...

  4. python内置函数之vars()

    vars([object]) 返回__dict__属性的值.当不传入参数时,和locals()等效.当函数接收一个参数时,参数可以是模块.类.类实例,或者定义了__dict__属性的对象. >& ...

  5. GPIO 输入—按键检测

    这里要用到一定的模电知识.电容两端电压不能突变,电感两端电流不能突变.这里利用了电容的放电延时实现硬件消抖.按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充 ...

  6. SharpDevelop浅析_4_TextEditor_自动完成、代码折叠……

    SharpDevelop浅析_4_TextEditor_自动完成.代码折叠…… SharpDevelop浅析_4_TextEditor_自动完成.代码折叠…… Parser及其应用: Code Com ...

  7. /usr/bin/ld: cannot find -lc错误原因及解决方法

    问题解决 我在执行如下命令的时候,出现了错误. gcc -o main main.c -static -L. –lmylib Linux环境下gcc静态编译/usr/bin/ld: cannot fi ...

  8. 关闭socket连接最好的方法

    最好关闭连接的方法 `C S` `shutdown-WR ` `发送FIN` ` read-0发送ACK` ` ......` ` close` ` 发送FIN` `read-0` `close` ` ...

  9. Oracle 错误:ORA-06413: Connection not open 解决办法

    http://blog.csdn.net/neso520/article/details/6037411 ——————————————————————————————————————————————— ...

  10. Java 07 example

    留下两个例子作为参考, 1. 追逐小方块的例子 2. HashMap 和 Iterator 的例子 Example one: import acm.graphics.*; import acm.pro ...