前言:
之前有写过 mybatis-plus 自带的分页【整合 mybatis-plus 和其分页查询功能到 springboot】,后来发现 PageHelper 更好用,对本身代码的侵入很小。
一、maven 依赖
最新 maven 依赖官网地址:PageHelper maven 依赖,
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
二、代码改造
原始代码查询代码如下:
public List<PushRecordDto> getPushRecord(Integer page, Integer size) {
return pushRecordMapper.getPushRecord((page-1)*size,size);
}
原始代码使用的是 limit 做的分页,其中 (page-1)*size,size 分别是 limit 的两个参数。
使用 PageHelper 改造:
1. sql 语句去掉 limit 声明,查询全部的数据。
2. 最终的数据返回需要使用 PageHelper 的 PageInfo 类接受转换(或者按需改造,改造的类下面也给个样例)。
public PageInfo getPushRecord(Integer page, Integer size) {
PageHelper.startPage(page, size, true); //如果不想count, 只要分页数据,设置false
List<PushRecordDto> list = pushRecordMapper.getPushRecord();
PageInfo pageInfo = new PageInfo(list);
return pageInfo;
}
PageInfo 改造的返回类:
@Data
public class RestPageInfo<T> {
//当前页码
private int currentPage;
//每页的数量
private int pageSize;
//当前页的数量
private int currentSize;
//总记录数
private long total;
//结果集
private List<T> list;
public RestPageInfo(List<T> list) {
PageInfo<T> pageInfo = new PageInfo<T>(list);
this.currentPage = pageInfo.getPageNum();
this.pageSize = pageInfo.getPageSize();
this.currentSize = pageInfo.getSize();
this.total = pageInfo.getTotal();
this.list = pageInfo.getList();
}
}
三、PageHelper 的逻辑
大体就是拦截 sql 语句,在 sql 语句执行前加上 limit 语句实现分页;如果想深究的话可以去看源码。