pagehelper的使用及避坑

pagehelper是一个非常简单实用的分页插件,但是还是有一个小坑在里面的,话不多说,直接上干货。

1. 分页的使用

PageInfo<T> pageInfo = PageHelper.startPage(pageNum,pageSize).doSelectPageInfo(() -> mapper.query());

参数说明: pageNum 第几页

​ pageSize 一页显示数量

这样就实现了SQL的分页,pagehelper会在SQL中自动加上分页的信息(limit)。

如果不习惯使用lamabda表达式,下面的代码也一样可以实现分页。

PageHelper.startPage(pageNum,pageSize);
PageInfo<T> pageInfo = new PageInfo<>(mapper.query());

注意,PageHelper.startPage()方法调用以后,后面必须有一个Mapper的查询方法,必须被消费掉。否则会由于ThreadLocal的原因,当线程被其他方法调用时被分页。

2. 小心避坑

这个坑就是“ 某些情况下,我明明没有使用PageHelper.startPage()方法,但是我的SQL为什么分页了?”

引起这个情况的可能有两种原因:

① 上一个PageHelper.startPage()未被消费

简单来讲,你上面的代码调用了PageHelper.startPage()方法,但是后面没有一个Mapper的查询方法来消费掉。所以你的这个查询就用到了上一个的分页。

② 你的传参对象的分页字段是pageNum和pageSize

划重点,这个才是真正的坑。只要你的传参对象的分页字段是pageNum和pageSize,你不需要调用PageHelper.startPage()方法,pagehelper就会帮你实现分页,因为pageNum和pageSize是PageHelper.startPage()方法的参数。

public static <E> Page<E> startPage(int pageNum, int pageSize) {
	return startPage(pageNum, pageSize, true);
}

所以,为了避免这种情况的出现,请不要给你的分页字段起这两个名字。pageNumber和pageCount就很不错。

你可能感兴趣的:(Java)