java分页查询源码_Java中分页功能源码实例

一、源码(后附使用说明)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

if (start>1) start--;

if(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  234  5  6  7  8  9

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

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

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

将变化频率高的参数放

四、数据分页的必要性

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

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

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

用户体验变差

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

分页数据的查询

pageNo  页码(从1开始)

pageSize 每页条数(默认10条)

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值