oracle一个比较完整的分页工具类Page
2009-05-06 13:58
483 查看
package com.thams.bianYan;
import java.io.Serializable;
import java.util.ArrayList;
public class Page implements Serializable{
private static final long serialVersionUID = 1L;
private static final int defaultItemCountPerPage = 10;//page默认的记录的个数设置为10
private int totalRecordCount;//符合该条件的总记录数目
private int itemCountPerPage;//每页显示的记录数目
private int pageNumber;//该页的页码
private int beginRowNum;//起始记录的行码
private int endRowNum;//终止记录的行码
private int lastPageNumber;//最后一页的页码
private int itemCountInPage;//在本页中的记录数目
private boolean hasPrevious;//是否有上一页
private boolean hasNext;//是否有上一页
private ArrayList itemsList;//该页中对象内容
public Page(int totalRecordCount, int itemCountPerPage, int pageNumber) {
//处理构造函数的记录总数参数
if(totalRecordCount<0){
totalRecordCount = 0;
}
//处理构造函数的每一页记录个数的参数
if(itemCountPerPage<=0){
itemCountPerPage = defaultItemCountPerPage;
}
//处理构造函数的当前页码参数
if(pageNumber<0){
pageNumber = 0;
}
if(totalRecordCount==0){
pageNumber = 0;
}else{
if(pageNumber==0){
pageNumber = 1;
}else{
int count = totalRecordCount/itemCountPerPage+(totalRecordCount%itemCountPerPage==0?0:1);
pageNumber = pageNumber>count?count:pageNumber;
}
}
//设置Page的各个成员变量
setTotalRecordCount(totalRecordCount);
setItemCountPerPage(itemCountPerPage);
setPageNumber(pageNumber);
if(totalRecordCount==0){
setBeginRowNum(0);
setEndRowNum(0);
setLastPageNumber(0);
setItemCountInPage(0);
setHasPrevious(false);
setHasNext(false);
}else{
setRowNums(totalRecordCount, itemCountPerPage, pageNumber);
setLastPageNumber(totalRecordCount, itemCountPerPage);
setItemCountInPage(totalRecordCount, itemCountPerPage, pageNumber);
setHasNext();
setHasPrevious();
}
}
/**
* 设置和得到总共含有的记录条数
*/
private void setTotalRecordCount(int totalRecordCount) {
this.totalRecordCount = totalRecordCount;
}
public int getTotalRecordCount() {
return this.totalRecordCount;
}
/**
* 设置和得到每一页有多少个元素
*/
public int getItemCountPerPage() {
return itemCountPerPage;
}
private void setItemCountPerPage(int itemCountPerPage) {
this.itemCountPerPage = itemCountPerPage;
}
/**
* 设置和得到当前页码数
*/
public int getPageNumber() {
return this.pageNumber;
}
private void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
/**
* 设置和得到该页显示的数据的开始元素的rownum
*/
private void setBeginRowNum(int beginRowNum) {
this.beginRowNum = beginRowNum;
}
public int getBeginRowNum() {
return beginRowNum;
}
/**
* 设置和得到该页显示的数据的结束元素的rownum
*/
private void setEndRowNum(int endRowNum) {
this.endRowNum = endRowNum;
}
public int getEndRowNum() {
return endRowNum;
}
/**
* 设置和得到最后一页的页码数
*/
public int getLastPageNumber() {
return lastPageNumber;
}
private void setLastPageNumber(int lastPageNumber) {
this.lastPageNumber = lastPageNumber;
}
private void setLastPageNumber(int totalRecordCount, int itemCountPerPage) {
if (totalRecordCount % itemCountPerPage == 0) {
setLastPageNumber(totalRecordCount / itemCountPerPage);
} else {
setLastPageNumber(totalRecordCount / itemCountPerPage + 1);
}
}
/**
* 设置和得到当前页面中总共有多少个元素
*/
private void setItemCountInPage(int itemCountInPage) {
this.itemCountInPage = itemCountInPage;
}
public int getItemCountInPage() {
return this.itemCountInPage;
}
private void setItemCountInPage(int totalRecordCount,int itemCountPerPage, int pageNumber) {
int temp = pageNumber * itemCountPerPage;
if (temp <= totalRecordCount) {
setItemCountInPage(itemCountPerPage);
} else {
setItemCountInPage(totalRecordCount - ((pageNumber - 1) * itemCountPerPage));
//此处也可以用取模运算得到
//setItemCountInPage(totalRecordCount%itemCountPerPage);
}
}
/**
* 设置和得到本页是否还有上一页
*/
public boolean isHasPrevious() {
return hasPrevious;
}
private void setHasPrevious(boolean hasPrevious) {
this.hasPrevious = hasPrevious;
}
private void setHasPrevious() {
if (pageNumber == 1) {
setHasPrevious(false);
} else {
setHasPrevious(true);
}
}
/**
* 设置和得到本页是否还有下一页
*/
public boolean isHasNext() {
return hasNext;
}
private void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
private void setHasNext() {
if (pageNumber < lastPageNumber) {
setHasNext(true);
} else {
setHasNext(false);
}
}
/**
* 设置和得到该页面中所含有的数据列表
*/
public ArrayList getItemsList() {
return itemsList;
}
public void setItemsList(ArrayList itemsList) {
this.itemsList = itemsList;
}
/**
*设置该页面的元素的起始顺序(记录总数不为0是调用该方法)
*/
private void setRowNums(int totalRecordCount,int itemCountPerPage, int pageNumber) {
setBeginRowNum((pageNumber - 1) * itemCountPerPage + 1);
if(pageNumber * itemCountPerPage>totalRecordCount){
setEndRowNum(totalRecordCount);
}else{
setEndRowNum(pageNumber * itemCountPerPage);
}
}
}
注意:
1.该工具类适宜在oracle下使用rownum来进行分页查询
2.该工具类属性的set方法已经被设置为private私有化,这些属性只有在构造函数中才能够被维护,因在外部应用程序使用时各个属性是作为控制标识的,所以取消外部程序对属性的维护权利
import java.io.Serializable;
import java.util.ArrayList;
public class Page implements Serializable{
private static final long serialVersionUID = 1L;
private static final int defaultItemCountPerPage = 10;//page默认的记录的个数设置为10
private int totalRecordCount;//符合该条件的总记录数目
private int itemCountPerPage;//每页显示的记录数目
private int pageNumber;//该页的页码
private int beginRowNum;//起始记录的行码
private int endRowNum;//终止记录的行码
private int lastPageNumber;//最后一页的页码
private int itemCountInPage;//在本页中的记录数目
private boolean hasPrevious;//是否有上一页
private boolean hasNext;//是否有上一页
private ArrayList itemsList;//该页中对象内容
public Page(int totalRecordCount, int itemCountPerPage, int pageNumber) {
//处理构造函数的记录总数参数
if(totalRecordCount<0){
totalRecordCount = 0;
}
//处理构造函数的每一页记录个数的参数
if(itemCountPerPage<=0){
itemCountPerPage = defaultItemCountPerPage;
}
//处理构造函数的当前页码参数
if(pageNumber<0){
pageNumber = 0;
}
if(totalRecordCount==0){
pageNumber = 0;
}else{
if(pageNumber==0){
pageNumber = 1;
}else{
int count = totalRecordCount/itemCountPerPage+(totalRecordCount%itemCountPerPage==0?0:1);
pageNumber = pageNumber>count?count:pageNumber;
}
}
//设置Page的各个成员变量
setTotalRecordCount(totalRecordCount);
setItemCountPerPage(itemCountPerPage);
setPageNumber(pageNumber);
if(totalRecordCount==0){
setBeginRowNum(0);
setEndRowNum(0);
setLastPageNumber(0);
setItemCountInPage(0);
setHasPrevious(false);
setHasNext(false);
}else{
setRowNums(totalRecordCount, itemCountPerPage, pageNumber);
setLastPageNumber(totalRecordCount, itemCountPerPage);
setItemCountInPage(totalRecordCount, itemCountPerPage, pageNumber);
setHasNext();
setHasPrevious();
}
}
/**
* 设置和得到总共含有的记录条数
*/
private void setTotalRecordCount(int totalRecordCount) {
this.totalRecordCount = totalRecordCount;
}
public int getTotalRecordCount() {
return this.totalRecordCount;
}
/**
* 设置和得到每一页有多少个元素
*/
public int getItemCountPerPage() {
return itemCountPerPage;
}
private void setItemCountPerPage(int itemCountPerPage) {
this.itemCountPerPage = itemCountPerPage;
}
/**
* 设置和得到当前页码数
*/
public int getPageNumber() {
return this.pageNumber;
}
private void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
/**
* 设置和得到该页显示的数据的开始元素的rownum
*/
private void setBeginRowNum(int beginRowNum) {
this.beginRowNum = beginRowNum;
}
public int getBeginRowNum() {
return beginRowNum;
}
/**
* 设置和得到该页显示的数据的结束元素的rownum
*/
private void setEndRowNum(int endRowNum) {
this.endRowNum = endRowNum;
}
public int getEndRowNum() {
return endRowNum;
}
/**
* 设置和得到最后一页的页码数
*/
public int getLastPageNumber() {
return lastPageNumber;
}
private void setLastPageNumber(int lastPageNumber) {
this.lastPageNumber = lastPageNumber;
}
private void setLastPageNumber(int totalRecordCount, int itemCountPerPage) {
if (totalRecordCount % itemCountPerPage == 0) {
setLastPageNumber(totalRecordCount / itemCountPerPage);
} else {
setLastPageNumber(totalRecordCount / itemCountPerPage + 1);
}
}
/**
* 设置和得到当前页面中总共有多少个元素
*/
private void setItemCountInPage(int itemCountInPage) {
this.itemCountInPage = itemCountInPage;
}
public int getItemCountInPage() {
return this.itemCountInPage;
}
private void setItemCountInPage(int totalRecordCount,int itemCountPerPage, int pageNumber) {
int temp = pageNumber * itemCountPerPage;
if (temp <= totalRecordCount) {
setItemCountInPage(itemCountPerPage);
} else {
setItemCountInPage(totalRecordCount - ((pageNumber - 1) * itemCountPerPage));
//此处也可以用取模运算得到
//setItemCountInPage(totalRecordCount%itemCountPerPage);
}
}
/**
* 设置和得到本页是否还有上一页
*/
public boolean isHasPrevious() {
return hasPrevious;
}
private void setHasPrevious(boolean hasPrevious) {
this.hasPrevious = hasPrevious;
}
private void setHasPrevious() {
if (pageNumber == 1) {
setHasPrevious(false);
} else {
setHasPrevious(true);
}
}
/**
* 设置和得到本页是否还有下一页
*/
public boolean isHasNext() {
return hasNext;
}
private void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
private void setHasNext() {
if (pageNumber < lastPageNumber) {
setHasNext(true);
} else {
setHasNext(false);
}
}
/**
* 设置和得到该页面中所含有的数据列表
*/
public ArrayList getItemsList() {
return itemsList;
}
public void setItemsList(ArrayList itemsList) {
this.itemsList = itemsList;
}
/**
*设置该页面的元素的起始顺序(记录总数不为0是调用该方法)
*/
private void setRowNums(int totalRecordCount,int itemCountPerPage, int pageNumber) {
setBeginRowNum((pageNumber - 1) * itemCountPerPage + 1);
if(pageNumber * itemCountPerPage>totalRecordCount){
setEndRowNum(totalRecordCount);
}else{
setEndRowNum(pageNumber * itemCountPerPage);
}
}
}
注意:
1.该工具类适宜在oracle下使用rownum来进行分页查询
2.该工具类属性的set方法已经被设置为private私有化,这些属性只有在构造函数中才能够被维护,因在外部应用程序使用时各个属性是作为控制标识的,所以取消外部程序对属性的维护权利
相关文章推荐
- 我写的一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)
- 一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)
- 一个封装比较完整的FTP类——clsFTP
- 一个oracle视频资料比较丰富的地方
- 一个封装比较完整的FTP类——clsFTP (转:http://www.cnblogs.com/name-lh/archive/2007/04/28/731528.html)
- 一个效率比较高的分页存储过程(SQL)
- 一个简单的分页例子,采用JSP+oracle编写
- 自己写一个分页PageHelper
- Oracle常用分页语句性能比较
- Hibernate对oracle的分页支持情况。OracleDialect和Oracle9Dialect的一个性能差别。
- 写一个比较完整的java数据库导出excl
- oracle一个事务的完整流程分析
- IPhone开发(2) 一个比较完整的类
- 大话分页(补充)——Threadlocal封装offSet和pageSize简化分页工具类
- 一个比较完整的机房建设方案要求
- mybatis的分页插件pagehelper-fix使用、数据库分页查询模板sql、总结mysql与oracle语句的区别
- 一个比较完整的连接Access数据库的DAL层代码
- 【Oracle批量更新】根据一个大表批量更新另一大表的方法比较