Java--mysql實現分頁查詢--分頁顯示


  當數據庫中數據條數過多時,一個頁面就不能顯示,這是要設置分頁查詢,首先要使用的是數據庫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頁。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM