1. 简介
PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数(pageNum,pageSize),之后在查询执行的时候,获取当前线程中的分页参数,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在 finally 语句中清除ThreadLocal中的查询参数。
说人话就是PageHelper.startPage(int pageNum, int pageSize)相当于开启分页,通过拦截 MySQL 的方式,把查询语句拦截下来加上 limit 语句
所以,该语句应该放在查询语句之前。
因此,整个过程是,前端会传过来pageNum和pageSize这两个参数,当点击前端的下一页按钮的时候,这个pageNum会加1,然后重新传到后端,调用后端的接口。后端拿到pageNum和pageSize之后,利用PageHelper.startPage设置分页,这样,在后面的sql语句中不用加 limit了。
注意:只要保证在PageHelper方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocal存储的对象。
2. 设计理念
一个页面分为两部分,页的信息描述部分以及页的数据部分,信息描述部分包括PageSerializable、PageInfo,数据部分是用Page。
PageInfo定义了一个页面的基本信息,包括页大小、页码等ÿ