- 一、导入依赖
- 二、分页代码逻辑
- 三、分页接口
前言
PageHelper是mybatis一个后端分页插件,可以用它实现后端分页,简化代码。
一、导入依赖
<!--
单独使用的时候:
PageHelper支持的常见的12种关系型数据库,在编写SQL的时候不会手动写limit关键字,所以代码可以移植
Github项目地址: https://github.com/pagehelper/Mybatis-PageHelper
-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
<!-- 在SpringBoot项目中使用-->
<!-- pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
二、分页逻辑代码
//原生的写法:1.先查询总页数 2.再根据分页的信息查询当前页的数据
//PageHelper的写法:开启分页
PageHelper.startPage(当前页,每页显示的条数);
//分页查询:只要开启了分页,它会帮助我们做什么事情?
//1.先查询总数量 //2.根据application.yml中驱动名自动实现分页,如果是mysql就用limit
//3.自动计算limit的第一个值:limit a,b [a = 当前页的起始下标 = (当前页-1)*每页显示的条数]
List<Emp> emps = empMapper.pageQuery(empQuery);
三、分页接口
//分页查询 + 高级查询
@PostMapping
public PageInfo<SysUser> queryPage(@RequestBody SysUserQuery sysUserQuery){
List<SysUser> sysUsers = sysUserService.queryPage(sysUserQuery);
return new PageInfo<>(sysUsers);
}
PageInfo的源码:
public class PageInfo<T> extends PageSerializable<T> {
private int pageNum;
private int pageSize;
private int size;
private int startRow;
private int endRow;
private int pages;
private int prePage;
private int nextPage;
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;
private boolean hasNextPage;
private int navigatePages;
private int[] navigatepageNums;
private int navigateFirstPage;
private int navigateLastPage;
public PageInfo() {
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
}
public PageInfo(List<T> list) {
this(list, 8);
}
public PageInfo(List<T> list, int navigatePages) {
super(list);
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
if (list instanceof Page) {
Page page = (Page)list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.pages = page.getPages();
this.size = page.size();
if (this.size == 0) {
this.startRow = 0;
this.endRow = 0;
} else {
this.startRow = page.getStartRow() + 1;
this.endRow = this.startRow - 1 + this.size;
}
} else if (list instanceof Collection) {
this.pageNum = 1;
this.pageSize = list.size();
this.pages = this.pageSize > 0 ? 1 : 0;
this.size = list.size();
this.startRow = 0;
this.endRow = list.size() > 0 ? list.size() - 1 : 0;
}
if (list instanceof Collection) {
this.navigatePages = navigatePages;
this.calcNavigatepageNums();
this.calcPage();
this.judgePageBoudary();
}
}
//其他方法略......
}