分頁功能(Pagenation類)
分頁功能的 封裝 + 實現:
分頁的SQL語句 + 分頁工具類Pagenation的細節 + 分頁原理
1、 分頁的SQL語句:
select * from (selectt.*,row_number() over(order by ROWNUM ASC) rn from goods t) where rn>=? andrn<=?
? goods :為表名,數據從goods中查得
? 第1個? :起始行號
? 第2個? :終點行號
2、 分頁工具類Pagenation的細節:
Pagenation類:類似JavaBean的工具類,封裝了分頁后的細節,
主要作用:封裝后臺分頁細節,前臺調用分頁細節。
簡介:實例化時需要傳入3個參數,然后類內部計算得到所有分頁細節
注意:后期還需要調用setList()方法將分頁結果也存入其中。
用法:后臺用此類封裝分頁結果,request給前臺,前臺展現。
傳入參數:當前頁數(pageNum)+每頁大小(size)+記錄總行數(rowCount)
3、 分頁原理:
1. 后臺sevlet根據參數調用分頁service()方法,返回值1個Pagenation類的對象,封裝了當前要求的分頁信息;
2. service()方法處理進程:根據傳入的3個參數,初始化Pagenation類,然后調用dao包下的分頁查詢類,返回值為1個List,將這個List也存入Pagenation對象中,返回返回該對象;
3. 返回的Pagenation對象包括了有關分頁所有內容,將此對象放在request中傳到前臺,跳轉到前臺;
4. 在前臺中取出Pagenation的相干信息,此時的Pagenation對象中寄存著分頁信息,用EL和JSTL顯示分頁信息。
4、 代碼實現:
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; //當前頁面開始行,第1行動第0行
private int first = 1; //第1頁 頁號
private int last; //最后1頁 頁號
private int prev; //前1頁 頁號
private int next; //后1頁 頁號
private int startNav; //導航欄 起始頁號
private int endNav; //導航欄 末尾頁號
private int navCount = 10; //導航欄長度 頁號顯示數量,最多顯示numCount+1條,這里顯示11頁
/**
* 構造器:初始化基本的3個參數(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); //1般情況下pageNum會等于傳入的pageNum,但當傳入的pageNum如果大于頁面總數,則pageNum就等于最大頁面數,即最后1頁的頁數
this.pageNum = Math.max(1, this.pageNum); //1般情況下pageNum會等于傳入的pageNum,但當傳入的pageNum如果小于1,則pageNum就等于1,即第1頁的頁數
this.startRow = pageNum*size - (size⑴);
this.prev = (this.pageNum⑴>1)?(this.pageNum⑴):1; //如果<前1頁>為第1頁,則顯示1,否則是{本頁頁數⑴}
this.next = (this.pageNum+1<this.pageCount)?(this.pageNum+1):this.pageCount; //如果<后1頁>為最后1頁,則返回{最后1頁頁數},否則返回{本頁數+1}
//導航處理
// this.startNav = (this.pageNum⑸>1)?(this.pageNum⑸):1; //導航來開始按鈕為{當前頁數⑸},如果當前頁數不足5,則導航欄開始按鈕為{第1頁}按鈕
this.startNav = (this.pageNum-(this.navCount/2)>1)?(this.pageNum-(this.navCount/2)):1; //優化后的開始按鈕,使當前頁位于導航欄中間,開始按鈕已不是{當前頁數⑸},而是{當前頁數-導航欄總長度的1半}
this.endNav = (this.startNav+navCount<this.last)?(this.startNav+navCount):this.last; //導航欄結束按鈕為{開始頁數+導航欄長度},如果{開始頁數+導航欄長度}超過頁面總數,則結束按鈕為{最后1頁}
}
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方法類:見網盤資料