分頁的封裝——java實現(基於oracle)

    分頁功能(Pagenation類)

 

分頁功能的 封裝 + 實現:

分頁的SQL語句 + 分頁工具類Pagenation的細節 + 分頁原理

 

一、     分頁的SQL語句:

select * from (selectt.*,row_number() over(order by ROWNUM ASC) rn from goods t) where rn>=? andrn<=?

Ø  goods :爲表名,數據從goods中查得

Ø  第一個? :起始行號

Ø  第二個? :終點行號

 

二、     分頁工具類Pagenation的細節:

Pagenation類:類似JavaBean的工具類,封裝了分頁後的細節,

主要作用:封裝後臺分頁細節,前臺調用分頁細節。

簡介:實例化時需要傳入3個參數,然後類內部計算得到所有分頁細節

注意:後期還需要調用setList()方法將分頁結果也存入其中。

用法:後臺用此類封裝分頁結果,request給前臺,前臺展示。

傳入參數:當前頁數(pageNum)+每頁大小(size)+記錄總行數(rowCount)

 

三、     分頁原理:

1.    後臺sevlet根據參數調用分頁service()方法,返回值一個Pagenation類的對象,封裝了當前要求的分頁信息;

2.    service()方法處理過程:根據傳入的三個參數,初始化Pagenation類,然後調用dao包下的分頁查詢類,返回值爲一個List,將這個List也存入Pagenation對象中,返回返回該對象;

3.    返回的Pagenation對象包含了有關分頁所有內容,將此對象放在request中傳到前臺,跳轉到前臺;

4.    在前臺中取出Pagenation的相關信息,此時的Pagenation對象中存放着分頁信息,用EL和JSTL顯示分頁信息。

 

四、     代碼實現:

1.    分頁工具類(核心中的核心類):

 

2.    其他代碼:

(1)、前端展示代碼:

package com.test.util;

import java.util.List;

/**
 * Pagenation分頁工具類:用於數據的分頁
 * 根據傳入的pageNum參數來確定從哪頁開始分頁
 * 根據傳入的size參數確定每頁分多少條記錄
 * 根據傳入的rowCount參數來確定數據總條數
 * @author Alvin Xing
 */
public class Pagenation {

/* 指定的參數 */
private int pageNum;  //當前頁號
private int size;  //頁面大小:每頁顯示多少條數據
/* DB中查找的數據 */
private long rowCount;  //數據總條數:共有多少條數據
private List list;  //數據內容
/* 由以上屬性計算得到的屬性 */
private int pageCount;  //頁面總數
private int startRow;  //當前頁面開始行,第一行爲第0行
private int first = 1;  //第一頁  頁號
private int last;  //最後一頁  頁號
private int prev;  //前一頁  頁號
private int next;  //後一頁  頁號
private int startNav;  //導航欄  起始頁號
private int endNav;  //導航欄 末尾頁號
private int navCount = 10;  //導航欄長度  頁號顯示數量,最多顯示numCount+1條,這裏顯示11頁


/**
* 構造器:初始化基本的三個參數(pageNum, size, rowCount),其他參數由計算得到
*/
public Pagenation(int pageNum, int size, long rowCount) {
//初始化基本參數
this.pageNum = pageNum;
this.size = size;
this.rowCount = rowCount;

//計算得到其他參數
this.pageCount = (int)Math.ceil(this.rowCount/(double)size);
this.last = pageCount;

this.pageNum = Math.min(pageNum, pageCount);  //一般情況下pageNum會等於傳入的pageNum,但當傳入的pageNum如果大於頁面總數,則pageNum就等於最大頁面數,即最後一頁的頁數
this.pageNum = Math.max(1, this.pageNum);  //一般情況下pageNum會等於傳入的pageNum,但當傳入的pageNum如果小於1,則pageNum就等於1,即第一頁的頁數

this.startRow = pageNum*size - (size-1);

this.prev = (this.pageNum-1>1)?(this.pageNum-1):1;  //如果<前一頁>爲第一頁,則顯示1,否則是{本頁頁數-1}
this.next = (this.pageNum+1<this.pageCount)?(this.pageNum+1):this.pageCount;  //如果<後一頁>爲最後一頁,則返回{最後一頁頁數},否則返回{本頁數+1}

//導航處理
// this.startNav = (this.pageNum-5>1)?(this.pageNum-5):1;  //導航來開始按鈕爲{當前頁數-5},如果當前頁數不足5,則導航欄開始按鈕爲{第1頁}按鈕
this.startNav = (this.pageNum-(this.navCount/2)>1)?(this.pageNum-(this.navCount/2)):1;  //優化後的開始按鈕,使當前頁位於導航欄中間,開始按鈕已不是{當前頁數-5},而是{當前頁數-導航欄總長度的一半}
this.endNav = (this.startNav+navCount<this.last)?(this.startNav+navCount):this.last;  //導航欄結束按鈕爲{開始頁數+導航欄長度},如果{開始頁數+導航欄長度}超過頁面總數,則結束按鈕爲{最後一頁}
}
public Pagenation(){  //空構造器
}


/**
* Setter() and Getter()
*/
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public long getRowCount() {
return rowCount;
}
public void setRowCount(long rowCount) {
this.rowCount = rowCount;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
public int getPrev() {
return prev;
}
public void setPrev(int prev) {
this.prev = prev;
}
public int getNext() {
return next;
}
public void setNext(int next) {
this.next = next;
}
public int getStartNav() {
return startNav;
}
public void setStartNav(int startNav) {
this.startNav = startNav;
}
public int getEndNav() {
return endNav;
}
public void setEndNav(int endNav) {
this.endNav = endNav;
}
public int getNavCount() {
return navCount;
}
public void setNavCount(int navCount) {
this.navCount = navCount;
}

}


(2)、後臺處理的servlet代碼:見網盤資料

(3)、處理分頁的service方法類:見網盤資料

發佈了33 篇原創文章 · 獲贊 16 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章