1. 程式人生 > 其它 >分頁在谷歌顯示1個_分頁技術

分頁在谷歌顯示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

頁面顯示

最後的實現頁面:

295d6d39989e94d151377b0783ae035e.pngtiajian

條件查詢