Java分頁查詢--分頁顯示

来源:http://www.cnblogs.com/PersistWp/archive/2017/08/14/7360000.html
-Advertisement-
Play Games

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5537 Accepted Submission(s): 4161 Problem Descrip ...
  • 今天遇到這樣的一個問題 封裝一個 抽獎概率函數 思前想後去網上找點資料吧,而且不止一種方法 這種我感覺還是比較容易的 還是那句話 實現功能的思路不止一種 代碼也不止一種 1 function get_rand($proArr) { 2 $result = ''; 3 4 //概率數組的總概率精度 5... ...
  • Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 177761 Accepted Submission(s): 44124 Problem Desc ...
  • 放假以來,伺服器Apache二次崩掉了,不能再拖了,找bug解決; <! more 崩掉的具體狀況是,伺服器出現彈框顯示:Apache停止工作; 順手關掉這個可惡的小彈框,世界就清靜了,伺服器正常運行; 具體問題: lxx__lxx__lxx__lxx__lxx__lxx__lxx__lxx____ ...
  • 關於python正則表達式學習小結: 1.首先推薦學習網站: 菜鳥學習:http://www.runoob.com/python/python-reg-expressions.html 慕課網:http://www.imooc.com/learn/550 自強學堂:http://code.ziqia ...
  • 首先瞭解Statement和PreparedStatement的區別: 由此可見,一般使用PreparedStatement。 操作資料庫SU(Course表),其中Course屬性有Cno,Cname,Cpno,Ccredit。 運行程式,控制台輸出符合條件的數據。 最後總結如下: * Prepa ...
  • 什麼是函數 函數是組織好的,可重覆使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重覆利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。 python函數格式: 註意了,函數一定是有返回值,沒有返回值,就 ...
  • 題目描述 如題,現在有一個並查集,你需要完成合併和查詢操作。 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,表示共有N個元素和M個操作。 接下來M行,每行包含三個整數Zi、Xi、Yi 當Zi=1時,將Xi與Yi所在的集合合併 當Zi=2時,輸出Xi與Yi是否在同一集合內,是的話輸出Y;否則話輸 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...