分頁在谷歌顯示1個_分頁技術
技術標籤:分頁在谷歌顯示1個
思
在寫這個之前,首先要明白為什麼要使用分頁技術。類似我們在瀏覽網頁時,使用者的一個請求響應往往會附帶著大量的資料,但是也許使用者僅僅只是需要部分資料就好,或者根據搜尋到的資料再做處理,這個時候將資料分頁顯示,對於使用者提高介面的閱讀性,也可以節省頻寬,增加伺服器的處理速度。需要注意的是,分頁技術常常用於條件查詢中,而資料的增加、刪除和修改則與分頁無關。
理解PageBean
面向物件的PageBean,大大降低了分頁實現的難度,降低分頁難度,實現功能重用 。下面是具體的實現程式碼:
package com.bjsxt.util; import java.util.List; /** * 分頁的三個基本屬性 * 1.每頁幾條記錄size 可以有預設值5 * 2.當前頁號 index 可以有預設值1 * 3.記錄總數totalCount:不可能有預設值,需要查詢資料庫獲取真正的記錄總數 * * 4.一共多少頁 :totalPageCount=totalCount/size+1 * 5 30 31 32 33 34 35 * 5.上一頁 index-1 當前頁1,上一頁1 * 6.下一頁 index+1 當前頁是最後一頁 下一頁:還是最後一頁 * * 擴充套件 * 分頁Bean還可以放要查詢的資料 protected List<T> list; * 分頁Bean還可以放頁碼列表 [1] 2 3 4 5 private int[] numbers; * * @author Administrator * * @param <T> */ public class PageBean<T> { private int size = 5;//每頁顯示記錄 // private int index = 1;// 當前頁號 private int totalCount = 0;// 記錄總數 ok private int totalPageCount = 1;// 總頁數 ok private int[] numbers;//展示頁數集合 //ok protected List<T> list;//要顯示到頁面的資料集 /** * 得到開始記錄 * @return */ public int getStartRow() { return (index - 1) * size; } /** * 得到結束記錄 * @return */ public int getEndRow() { return index * size; } /** * @return Returns the size. */ public int getSize() { return size; } /** * @param size * The size to set. */ public void setSize(int size) { if (size > 0) { this.size = size; } } /** * @return Returns the currentPageNo. */ public int getIndex() { if (totalPageCount == 0) { return 0; } return index; } /** * @param currentPageNo * The currentPageNo to set. */ public void setIndex(int index) { if (index > 0) { this.index = index; } } /** * @return Returns the totalCount. */ public int getTotalCount() { return totalCount; } /** * @param totalCount * The totalCount to set. */ public void setTotalCount(int totalCount) { if (totalCount >= 0) { this.totalCount = totalCount; setTotalPageCountByRs();//根據總記錄數計算總頁�? } } public int getTotalPageCount() { return this.totalPageCount; } /** * 根據總記錄數計算總頁�? * 5 * 20 4 * 23 5 */ private void setTotalPageCountByRs() { if (this.size > 0 && this.totalCount > 0 && this.totalCount % this.size == 0) { this.totalPageCount = this.totalCount / this.size; } else if (this.size > 0 && this.totalCount > 0 && this.totalCount % this.size > 0) { this.totalPageCount = (this.totalCount / this.size) + 1; } else { this.totalPageCount = 0; } setNumbers(totalPageCount);//獲取展示頁數集合 } public int[] getNumbers() { return numbers; } /** * 設定顯示頁數集合 * * 預設顯示10個頁碼 * 41 42 43 44 [45 ] 46 47 48 49 50 * * * [1] 2 3 4 5 6 7 8 9 10 * * 41 42 43 44 45 46 47 [48] 49 50 * @param totalPageCount */ public void setNumbers(int totalPageCount) { if(totalPageCount>0){ //!.當前陣列的長度 int[] numbers = new int[totalPageCount>10?10:totalPageCount];//頁面要顯示的頁數集合 int k =0; // //1.陣列長度<10 1 2 3 4 .... 7 //2.陣列長度>=10 // 當前頁<=6 1 2 3 4 10 // 當前頁>=總頁數-5 ......12 13 14 15 // 其他 5 6 7 8 9 當前頁(10) 10 11 12 13 for(int i = 0;i < totalPageCount;i++){ //保證當前頁為集合的中�? if((i>=index- (numbers.length/2+1) || i >= totalPageCount-numbers.length) && k<numbers.length){ numbers[k] = i+1; k++; }else if(k>=numbers.length){ break; } } this.numbers = numbers; } } public void setNumbers(int[] numbers) { this.numbers = numbers; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } /* public static int getTotalPageCount(int iTotalRecordCount, int iPageSize) { if (iPageSize == 0) { return 0; } else { return (iTotalRecordCount % iPageSize) == 0 ? (iTotalRecordCount / iPageSize) : (iTotalRecordCount / iPageSize) + 1; } }*/ }
其中pageBean作為一個工具類物件,他的屬性有:
size = 5;//每頁顯示記錄
index = 1;// 當前頁號
totalCount = 0;// 記錄總數
totalPageCount = 1;// 總頁數
private int[] numbers;//展示頁數集合
protected List<T> list;//要顯示到頁面的資料集
在使用時,業務層中首先查詢資料庫中獲取記錄總數,根據該方法會直接計算使用記錄總數計算PageBean的其他屬性(totalCount,totalPageCount,numbers),實現程式碼:
public void findStu(PageBean<Student> pageBean) { //查詢資料庫中獲取記錄總數 int totalCount =this.stuDao.findCount() ; System.out.println("count="+totalCount); //使用記錄總數計算PageBean的其他屬性(totalCount,totalPageCount,numbers) pageBean.setTotalCount(totalCount); //呼叫dao層獲取指定頁 的學生資料,並放入pageBean的list中 //index (index-1)* size index* size //int start = (pageBean.getIndex()-1)*pageBean.getSize(); //int end = pageBean.getIndex()* pageBean.getSize(); int start = pageBean.getStartRow(); int end = pageBean.getEndRow(); List<Student> list = this.stuDao.findStu(start,end); pageBean.setList(list); }
總的來說,基本分頁的後臺操作:
控制層 •
獲取當前頁號 • 將當前頁號給PageBean • 傳遞PageBean到業務層 •
業務層 •
獲取記錄總數 • 使用記錄總數計算PageBean其他屬性值 • 呼叫資料訪問層獲取當前頁資料並給PageBean
資料訪問層 •
分頁查詢語句 (不帶條件查詢)
String sql = "select * from (select rownum r,e2.* from " + "( select e.* from student e order by score desc) e2 " + "where rownum<="+end+" ) where r>"+start
頁面顯示
最後的實現頁面:
tiajian條件查詢