當資料庫中數據條數過多時,一個頁面就不能顯示,這是要設置分頁查詢,首先要使用的是資料庫sql語句的limit條件實現分組查詢sql語句大概形式為: select * from table limit 開始索引,顯示條數 用該語句就會實現分塊查詢,並且每頁顯示固定條數。首先要實現後臺分頁,我們需要知道 ...
當資料庫中數據條數過多時,一個頁面就不能顯示,這是要設置分頁查詢,首先要使用的是資料庫sql語句的limit條件實現分組查詢
sql語句大概形式為:
select * from table limit 開始索引,顯示條數
用該語句就會實現分塊查詢,並且每頁顯示固定條數。
(由於limit是mysql特有的,如果是Oracle資料庫的話就需要通過rownum來限制比如:select * from table where rownum >=開始索引。如果是sql sever資料庫的話可以用到top關鍵字,如取m到n條數據:select top (n-m+1) id from table where id not in (select top m-1 id from table))
首先要實現後臺分頁,我們需要知道它有多少頁,每頁有多少行,這就需要知道一共多少行,調用sql語句時還需要知道每一頁的開始索引,開始索引是根據當前頁數算出來的,所以還需要知道當前頁數,查詢後會返回一個列表存儲當前頁數據。將這些屬性及獲取設置的方法封裝成一個類就有了下麵的page類:
1 public class Page<T> { 2 private List<T> data;//數據列表 3 private int pagenum;//當前頁數 4 private int pagesize;//當前頁顯示條數 5 private int rows;//總行數 6 public Page(int rows,int pagenum, int pagesize) { 7 super(); 8 data=new ArrayList<>(); 9 this.rows=rows; 10 this.setPagesize(pagesize); 11 this.setPagenum(pagenum); 12 } 13 public Page() { 14 super(); 15 } 16 public int getPagenum() { 17 return pagenum; 18 } 19 public void setPagenum(int pagenum) { 20 if(pagenum>getTotalpage()) 21 { 22 this.pagenum=getTotalpage(); 23 } 24 else { 25 this.pagenum = pagenum; 26 } 27 if(pagenum<1) 28 { 29 this.pagenum=1; 30 } 31 } 32 public int getPagesize() { 33 return pagesize; 34 } 35 public void setPagesize(int pagesize) { 36 this.pagesize = pagesize; 37 } 38 public int getTotalpage() { 39 //計算總頁數 40 if(rows%pagesize==0) 41 { 42 return rows/pagesize; 43 } 44 else { 45 return rows/pagesize+1; 46 } 47 } 48 public int getRows() { 49 return rows; 50 } 51 public void setRows(int rows) { 52 this.rows = rows; 53 } 54 public int getIndexnum() { 55 //獲取索引值 56 return pagesize*(pagenum-1); 57 } 58 public List<T> getData() { 59 return data; 60 } 61 public void setData(List<T> data) { 62 this.data = data; 63 } 64 }Page類
初始化時我們只需要獲得數據總條數,頁數及每頁顯示條數。數據總條數可以用sql語句select count(*)from table 獲得。每次查詢時只需要傳入當前頁數就可以了。將每次查詢後的page對象傳入jsp前臺頁面,並以一個div來顯示
1 <div> 2 <a href="/stuent8.11/stuServlet?pagenum=1">首頁</a> 3 <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上一頁</a> 4 <c:choose> 5 <c:when test="${apage.totalpage<=5 }"> 6 <c:set var="begin" value="1"></c:set> 7 <c:set var="end" value="${apage.totalpage }"></c:set> 8 </c:when> 9 <c:when test="${apage.totalpage>5 }"> 10 <c:set var="begin" value="1"></c:set> 11 <c:set var="end" value="5"></c:set> 12 <c:if test="${apage.pagenum>3 }"> 13 <c:set var="begin" value="${apage.pagenum-2 }"></c:set> 14 <c:set var="end" value="${apage.pagenum+2 }"></c:set> 15 </c:if> 16 <c:if test="${end>apage.totalpage }"> 17 <c:set var="begin" value="${apage.totalpage-4 }"></c:set> 18 <c:set var="end" value="${apage.totalpage }"></c:set> 19 </c:if> 20 </c:when> 21 </c:choose> 22 <c:forEach begin="${begin }" end="${end }" step="1" var="num"> 23 <c:if test="${apage.pagenum==num }"> 24 [${num }] 25 </c:if> 26 <c:if test="${apage.pagenum!=num }"> 27 <a href="/stuent8.11/stuServlet?pagenum=${num }">${num }</a> 28 </c:if> 29 </c:forEach> 30 <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下一頁</a> 31 <a href="/stuent8.11/stuServlet?pagenum=${apage.totalpage }">末頁</a> 32 </div>顯示div
其中的一個choose是用於規定頁面顯示的最大頁數,這裡是5頁,就是說當點到第4頁時,第1頁就會消失,出現第6頁。