前言:
PageHelper是一款开源免费的Mybatis第三方物理分页插件。所谓物理分页,也就是每次都会根据要查询的参数去对应的数据库进行查询,真正实现了按需动态查询。逻辑分页,一般是指一次性查询所有的数据,再由service根据参数传递给前端对应页数的数据,还有一种就是传递给前端所有的数据,再由前端控制显示的数据。因此,对于数据量大的情况下,物理分页要比逻辑分页性能高很多。
分页思想:
笔者在未接触过分页插件之前,曾经自己造过分页的轮子,一般来说,分页需要有这么几个参数:
符合条件的数据量count:这个一般就是根据sql条件count(1)传递回数据量;
每页的数据量pageSize:这个参数由开发者自行确定;
查询页码pageNum:这个参数一般由前端传到后端,但是要保证0<pageNum<=Math.ceil(count/pageSize)。
PageHelper的引用:
关于PageHelper的引入,详情参考官网讲述:https://pagehelper.github.io/docs/howtouse/#2
PageHelper在代码中的使用:
一般情况下笔者习惯使用如下代码:
PageHelper.startPage(pageNum, pageSize);
.....省略server的内容,一般返回一个list
PageInfo<类名> pageInfo = new PageInfo<>(list);
PageHelper源码解析:
- 在PageHelper.startPage(pageNum, pageSize),这段代码表示分页的开始,意思是从第pageNum页开始,每页显示pageSize条记录。我们进入源码,发现是这么一个泛型方法:
public static <E> Page<E> startPage(int pageNum, int pageSize) {
return startPage(pageNum, pageSize, DEFAULT_COUNT);
}
其中,DEFAULT_COUNT我们翻阅前边,发现是一个boolean参数,
protected static boolean DEFAULT_COUNT = true;
该参数表示由分页插件默认查询