oracle一个比较完整的分页工具类Page

来源:互联网 发布:jquery 数组转换json 编辑:程序博客网 时间:2024/05/21 11:35

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私有化,这些属性只有在构造函数中才能够被维护,因在外部应用程序使用时各个属性是作为控制标识的,所以取消外部程序对属性的维护权利

 

 

 

原创粉丝点击