如何在實際項目中使用PageHelper分頁插件


PageHelper是一個分頁插件,能夠簡單快速的幫助開發人員完成常見的分頁功能,你只需要簡單的使用兩行代碼就可以完成一個分頁效果…

最近做一個科創項目,使用Maven+SSM的環境,有分頁的功能,於是使用了PageHelper的分頁工具來完成分頁功能,體驗非常不錯。

1. 數據庫准備

database

t_diy是用戶自己寫個性文章的的一個表,t_categories是文章的分類表,t_user用戶表;要分頁顯示的就是根據分類ID查找對應類別的diy信息並顯示。

2. PageHelper引入

1. 在pom.xml中引入依賴

1
2
3
4
5
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>

(官方推薦使用最新版本,當前最新是5.1.10)
雖然官方說明要引入pagehelper.jar和jsqlparser.jar,但實際上引入pagehelper.jar時會自動引入jsqlparser.jar

2. 配置Mybatis插件
可以選擇在spring配置文件中配置,也可以在mybatis全局配置文件中配置插件。我是在mybatis全局文件中配置的。

1
2
3
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

這里要說明一點(本人踩過的坑):

注意plugins的書寫位置

開始使用PageHelper

使用非常簡單,調用PageHelper.startPage(pageNum,pageSize);第一個參數是第幾頁,第二個參數是頁大小,緊跟其后的第一個查詢方法就是一個分頁查詢了

為了更方便的顯示和處理分頁的結果,可以使用PageInfo對查詢結果進行封裝:PageInfo pageInfo=new PageInfo(data,navigatePages);第一個參數是查詢出來的數據集,一般可以是一個List,第二個參數是頁面上需要連續顯示多少頁(可以省略)。

以下是我的代碼:

1
2
3
4
5
6
7
8
9
10
@RequestMapping(value = "/showCategory")
public String getCategories(@RequestParam("cId")Integer cId,@RequestParam(value = "pageNum",defaultValue = "1")Integer pn,ModelMap map){
PageHelper.startPage(pn,14); //每頁顯示14條信息
List<Diy> diys=diyService.getCategories(cId); //獲得分類id為cid的所有diy信息
PageInfo pageInfo=new PageInfo(diys,5); //封裝為PageInfo
map.addAttribute("pageInfo",pageInfo); //PageInfo傳給頁面,可以直接使用EL表達式獲取
map.addAttribute("cols", XBookUtil.getDiyCategoriesCols(pageInfo.getSize()));//這個是我為了較均為的排序數據所設計的方法(不需要關心)
map.addAttribute("curCategory",new Integer(cId));
return "html/bookDIY/categoryView"; //分類頁面視圖:categoryView.jsp
}

至於SQL語句,不需要做任何與分頁相關的事情,我的SQL語句就是一個簡單的查詢:

以上就完成了最簡單當然也是最常用的分頁功能,是不是非常簡單。

使用Bootstrap美化分頁欄

分頁數據得到了,當然也需要對頁面進行優化,Bootstrap是一個容易上手的前端庫,提供 大專欄  如何在實際項目中使用PageHelper分頁插件了非常多的樣式,地址:https://v4.bootcss.com

Bootstrap提供了分頁欄樣式,具體的使用就不都說了,可以參考官網。想要的效果應該是這樣的:

其實包含了很多小的邏輯:

  • 第一頁時首頁不能點,前一頁不顯示
  • 最后一頁時末頁不能點,后一頁不顯示
  • 當前頁高亮
  • 用戶點擊更新顯示的頁碼

這就是為什么要將結果封裝為PageInfo的好處,使用PageInfo可以方便的控制這些邏輯:

  1. PageInfo有一個屬性navigatepageNums存放的是當前應該顯示的頁碼,這和之前PageInfo構造的第二個參數有關。(循環顯示頁碼)
  2. PageInfo有屬性list,存放分頁的數據(獲取數據)
  3. PageInfo有屬性pageNum,表示當前頁碼 (判斷是否高亮顯示)
  4. PageInfo有屬性isFirstPage,isLastPage,表示是否是第一頁和最后一頁(控制首末頁按鈕,前后頁的顯示和隱藏)

我的代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<c:if test="${pageInfo.list.size()>0}">
<div class="container mb-5">
<ul class="pagination justify-content-center">
<c:if test="${pageInfo.isFirstPage}">
<li class="page-item disabled"><a class="page-link" href="#">首頁</a></li>
</c:if>
<c:if test="${pageInfo.isFirstPage != true}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}">首頁</a></li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pageNum-1}"><<</a></li>
</c:if>
<c:forEach items="${pageInfo.navigatepageNums}" var="pn">
<c:if test="${pageInfo.pageNum == pn}">
<li class="page-item active"><a class="page-link" href="#">${pn}</a></li>
</c:if>
<c:if test="${pageInfo.pageNum != pn}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pn}">${pn}</a></li>
</c:if>
</c:forEach>
<c:if test="${pageInfo.isLastPage}">
<li class="page-item disabled"><a class="page-link" href="#">末頁</a></li>
</c:if>
<c:if test="${pageInfo.isLastPage != true}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pageNum+1}">>></a></li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pages}">末頁</a></li>
</c:if>
</ul>
</div>
</c:if>

最后的效果如下所示:
![](如何在實際項目中使用PageHelper分頁插件/result.PNG)

(數據有限,只有兩頁...)


免責聲明!

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



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