首先先明確分頁的目標,是爲了減少一次性讀取數據庫的總量,防止讀取過慢,給瀏覽器更加壓力。
如何分頁呢?我這裏寫一個長點的sql,大家自己看一下,主要是看rownum這個屬性如何使用
String sql="SELECT b.r,b.name,b.grade FROM(
SELECT rownum r,a.name,a.grade FROM(
SELECT TU.name,TG.GRADE FROM T_GRADE tg INNER JOIN t_user tu ON TU.U_ID =TG.U_ID WHERE TG.C_ID =? AND TG.GRADE_TYPE=2) a
WHERE rownum<=?)b
WHERE r>?";
這是一個三表聯查,查詢到的表作爲字表a表,然後查詢a表的rownum (給一個別名r)和其它屬性,這裏限制rownum只能是<= 或者是<類型,這裏不懂得可以去查詢一下rownum如何使用。 然後這些內容作爲一個b表,必須查詢b表的r這個列(即rownum),然後這裏可以給r加上>限制了 這樣就能求到?<rownum>=? 這個範圍內的值。
然而咱們還需要這三個表聯查的統計count(列名)來作爲查詢到的總量數據。 數據庫準備好了,接下來上java代碼
// 設置頁數
int pageNos;
// 獲取不到頁數或者獲取到的頁數小於1,頁數爲1,否則頁數爲傳遞過來的數據
if (req.getParameter("pageNos") == null
|| Integer.parseInt(req.getParameter("pageNos")) < 1) {
pageNos = 1;
} else {
pageNos = Integer.parseInt(req.getParameter("pageNos"));
}
List<NameAndGrade> list = gradeService.findAllSubGradeByC_id(c_id,pageNos * 5, (pageNos - 1) * 5);
int type = 2;// 提交的狀態
Object[] object = { c_id, type };// 放入obj數組
int i = gradeService.findCountNameAndGrade(object);// 獲取總量統計數
req.setAttribute("pageNos", pageNos);
// 定義總頁數(每頁數據量是5條)
int countPage = PagingHelper.getPageCount(i, 5);
req.setAttribute("pageNos", pageNos);
req.setAttribute("countPage", countPage);
這裏面 藍色字體是固定寫法,剩下就看你service如何寫的了,獲取一個表的內容,有分頁限制,在findAllSubGradeByC_id這個方法中 第二個參數pageNos*5是每頁顯示五條數據,這個是最大記錄數,(pageNos - 1) * 5是最小記錄數,例如第一頁,(pageNos - 1) * 5是從0開始,pageNos*5從5結束,即數據庫查詢出數據1-5
下面是一個獲取統計總量方法,然後寫一個方法獲取總頁數,儲存進入request域中
在頁面中設置頁數
<c:if test="${pageNos>1}">
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=1&c_id=${c_id}">首頁</a>
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos-1}&c_id=${c_id}">上一頁</a>
</c:if>
<c:if test="${pageNos<countPage}">
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos+1}&c_id=${c_id}">下一頁</a>
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${countPage}&c_id=${c_id}">末頁</a>
</c:if>
這裏${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos+1}&c_id=${c_id}這個地址是一個mvc的地址,參數必傳的是pageNos,後面的是我寫的方法中需要的內容,這樣一個分頁查詢就做好了,希望大家可以多多討論