前言: 本文档使用的是 SpringBoot, 如果是 Spring 还需要在 MyBatis 配置 xml 中配置拦截器, 并且 PageHelper 是针对 MyBatis 的, MyBatis 的集成不在本文档中叙述, 请先集成 MyBatis.
一, 引入 PageHelper 分页插件
引入的方式有两种, 可以是导入 Jar 包, 也可以使用 Maven 来构建, 本文档将使用 Maven 来构建项目, 如果你希望使用导入 Jar 包的方式进行集成, 请从下面的链接下载 Jar 包:
在 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.YAML
- # 分页配置
- pagehelper:
- helper-dialect: MySQL
- reasonable: true
- support-methods-arguments: true
- params: count=countSql
改代码不加入, 程序也可以正常运行, 请根据实际情况进行添加.
三, 在 service 层中使用 PageHelper 插件
(1) 最简单的分页查询, 直接传入
- public List<Article> selectArticleListByTag(TTag tag, int page, int rows) {
- // 使用分页插件, 核心代码就这一行, 页数, 每页行数
- PageHelper.startPage(page, rows);
- // 在 mapper.xml 中不要加 limit 分页, 插件会自动拦截和添加 limit 分页
- return articleMapper.selectArticleListByTag(tag);
- }
分页的同时, 获取总数量, 从而计算总页数
(2)EasyUI 为例
由于我使用了 EasyUI,DataGrid 控件的分页需要返回总行数, 所以拿来展示比较经典
先定义一个 Page 变量, 这个类在 com.GitHub.pagehelper.Page, 然后依然是 PageHelper.startPage(page, rows), 然后进行正常的查询, 在查询后 pages.getTotal() 就可以获取到总行数了, 拿到总行数, 就可以计算出总页数
- EasyUIDataGrid.java:
- package com.sun123.springboot.entity.easyui;
- import java.util.List;
- public class EasyUIDataGrid {
- // 当前页显示的数据 ? 表示任意类型
- private List<?> rows;
- // 表中总个数, 不是总页数
- private long total;
- public List<?> getRows() {
- return rows;
- }
- public void setRows(List<?> rows) {
- this.rows = rows;
- }
- public long getTotal() {
- return total;
- }
- public void setTotal(long total) {
- this.total = total;
- }
- }
- UserService.java:
- // 查询所有学生信息
- EasyUIDataGrid showAllStudents(int page, int rows);
- UserServiceImpl.java:
- public EasyUIDataGrid showAllStudents(int page, int rows) {
- EasyUIDataGrid dataGrid = new EasyUIDataGrid();
- Page pages = PageHelper.startPage(page,rows);
- List<User> userList = userMapper.selectByExample(null);
- dataGrid.setRows(userList);
- dataGrid.setTotal(pages.getTotal());
- return dataGrid;
- }
- AdminController.java:
- @PostMapping("/showAllStudents")
- @ResponseBody
- public EasyUIDataGrid showAllStudent(int page, int rows){
- EasyUIDataGrid dataGrid = userService.showAllStudents(page, rows);
- return dataGrid;
- }
四, 关于页数传入异常的情况
有同学会担心, 如果传入的页数是负数或者大于总页数会不会报错? 是否需要进行边界检查?
其实, 如果传入的页数是负数, PageHelper 会展示第一页的数据; 如果传入的页数大于总页数, PageHelper 会展示最后一页的数据. 并不会报错, 所以使用这个插件比较省心, 不用担心异常的页数传入导致业务抛出异常.
参考: https://www.neilren.com/Article/1003276
来源: http://www.bubuko.com/infodetail-2993119.html