PageHelper插件的使用

338 阅读1分钟

1、依赖

maven依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

文档 github

2、API

比较关键的三个类是:PageHelper(开启分页)、PageInfo(封装分页)、PageResult(解析分页结果)

//开启分页
PageHelper.startPage; 
//清除ThreadLocal中存储的分页参数
//这个插件里用了ThreadLocal以保障线程安全,每个线程的分页参数存储在ThreadLocal里,不用了要清除。。。
//这块儿想了解的话建议看看下面的API,页面内搜索:不安全的分页
PageHelper.clearPage; 
......

API讲解,很详细,就是篇幅比较长。

3、使用方式

一个标准的查询

public PageResult<Map<String,String>> getInfo(ExamplePo examplePo) {
    //开启分页
    PageHelper.startPage(examplePo.getPageNo(), examplePo.getPageSize(), "");
    //其实生成了两个sql:一个查数据总数,一个查数据
    List<Map<String,String>> list = exampMapper.getExampleInfo(examplePo);
    //info的total就是数据总数
    PageInfo<Map<String,String>> info = new PageInfo<>(list);
    //解析分页结果
    return new PageResult<Map<String,String>>(info.getTotal(), lists);
}

4、注意事项

1、在集合查询前使用PageHelper.startPage(pageNum,pageSize),并且 中间不能穿插执行其他SQL

2、需要将你的查询语句放到 PageHelper.startPage 的后面执行,这样才能用到拦截功能;

3、PageResult的第一个参数是PageInfo的总数,不能用list.size()。

5、Tips

1、startPage相当于开启分页,通过拦截MySQL的方式, 把你的查询语句拦截下来加limit,也就是说,它不是对查询出来的结果进行处理,而是在查询之前修改了sql,添加了limit、排序等

2、pagehelper会根据配置生成两个sql并执行:第一遍是count(0),查出总条数;第二遍使用设置的参数分页查询出pageSize条数据。