使用 PageHelper 做 mybatis 的分页查询

前言:

        之前有写过 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 语句实现分页;如果想深究的话可以去看源码。

猜你喜欢

转载自blog.csdn.net/qingquanyingyue/article/details/123051353
今日推荐