前言:本文檔使用的是 SpringBoot,如果是 Spring 還需要在 MyBatis 配置 xml 中配置攔截器,並且 PageHelper 是針對 MyBatis 的,MyBatis 的集成不在本文檔中敘述,請先集成 MyBatis。
一、引入PageHelper分頁插件
引入的方式有兩種,可以是導入Jar包,也可以使用 Maven 來構建,本文檔將使用 Maven 來構建項目,如果你希望使用導入Jar包的方式進行集成,請從下面的鏈接下載Jar包:
-
https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
-
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
在 pox.xml 中添加PageHelper分頁插件依賴
<!-- 分頁插件pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.10</version> </dependency>
由於是SpringBoot項目,這里使用 pagehelper-spring-boot-starter ,如果是 spring 應使用 pagehelper
二、配置application.yml
# 分頁配置
1 pagehelper: 2 helper-dialect: mysql 3 reasonable: true 4 support-methods-arguments: true 5 params: count=countSql
改代碼不加入,程序也可以正常運行,請根據實際情況進行添加。
三、在service層中使用PageHelper插件
(1)最簡單的分頁查詢,直接傳入
1 public List<Article> selectArticleListByTag(TTag tag, int page, int rows) { 2 //使用分頁插件,核心代碼就這一行,頁數、每頁行數 3 PageHelper.startPage(page, rows); 4 //在 mapper.xml 中不要加 limit 分頁,插件會自動攔截和添加 limit 分頁 5 return articleMapper.selectArticleListByTag(tag); 6 }
分頁的同時,獲取總數量,從而計算總頁數
(2)EasyUI為例
由於我使用了EasyUI,DataGrid控件的分頁需要返回總行數,所以拿來展示比較經典
先定義一個 Page 變量,這個類在com.github.pagehelper.Page,然后依然是 PageHelper.startPage(page, rows),然后進行正常的查詢,在查詢后pages.getTotal()就可以獲取到總行數了,拿到總行數,就可以計算出總頁數
EasyUIDataGrid.java:
1 package com.sun123.springboot.entity.easyui; 2 3 import java.util.List; 4 5 public class EasyUIDataGrid { 6 //當前頁顯示的數據 ?表示任意類型 7 private List<?> rows; 8 //表中總個數,不是總頁數 9 private long total; 10 11 public List<?> getRows() { 12 return rows; 13 } 14 15 public void setRows(List<?> rows) { 16 this.rows = rows; 17 } 18 19 public long getTotal() { 20 return total; 21 } 22 23 public void setTotal(long total) { 24 this.total = total; 25 } 26 }
UserService.java:
1 //查詢所有學生信息 2 EasyUIDataGrid showAllStudents(int page, int rows);
UserServiceImpl.java:
1 public EasyUIDataGrid showAllStudents(int page, int rows) { 2 EasyUIDataGrid dataGrid = new EasyUIDataGrid(); 3 Page pages = PageHelper.startPage(page,rows); 4 List<User> userList = userMapper.selectByExample(null); 5 dataGrid.setRows(userList); 6 dataGrid.setTotal(pages.getTotal()); 7 return dataGrid; 8 }
AdminController.java:
1 @PostMapping("/showAllStudents") 2 @ResponseBody 3 public EasyUIDataGrid showAllStudent(int page, int rows){ 4 EasyUIDataGrid dataGrid = userService.showAllStudents(page, rows); 5 return dataGrid; 6 }
四、關於頁數傳入異常的情況
有同學會擔心,如果傳入的頁數是負數或者大於總頁數會不會報錯?是否需要進行邊界檢查?
其實,如果傳入的頁數是負數,PageHelper 會展示第一頁的數據;如果傳入的頁數大於總頁數,PageHelper會展示最后一頁的數據。並不會報錯,所以使用這個插件比較省心,不用擔心異常的頁數傳入導致業務拋出異常。
參考:https://www.neilren.com/Article/1003276