其他分享
首页 > 其他分享> > PageHelper入门

PageHelper入门

作者:互联网

使用场景

便用mybatis,可以用 pagehelper 分页 。

maven依赖

<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>4.1.6</version>
</dependency>

主要类及方法:

Page<E> startPage(int pageNum, int pageSize): 开始分页

getResult(): 获取分页后的结果

getTotal():获取总数
PageInfo(List<T> list): 构造PageInfo对象

getTotal():获取总数

getList(): 获取结果集

PageHelper 原理:

(1) 执行 PageHelper.startPage(),会初始化一个 ThreadLocal 属性变量 LOCAL_PAGE ,这个 ThreadLocal 属性变量会在后续设置线程副本变量 Page.

(2) PageHelper类实现了Interceptor接口。本质上是一个拦截器。
这个拦截器会在我们的sql查询语句之前,执行 SELECT count(0) 语句进行计数,
还会在startPage()之后的第一个select查询语句中加入 limit 进行分页。

select count(0) from tt_user t where t.city = 'sz';

select  * from tt_user t where t.city = 'sz' order by t.create_time desc limit 0,10 ;

(3)获取 ThreadLocal 中设置的 Page 信息,获得分页的总数和结果。

PageHelper 使用:

(1)设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);

(2)查询并分页
将含有查询sql的查询方法放在startPage()后面执行即可。
注意:只有紧跟在startPage后面的第一个select语句会被分页。
PageHelper分页失效的场景: 如果你想要分页的select语句前面还有其他的select语句,只有第一个select语句会分页。

(3)获取分页的结果和总数
通过 Page或者PageInfo获取。

PageHelper 示例一:

//设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);
//查询并分页
//userService.selectBy(userInfoDTO) 是查询方法,替换成自己的查询方法即可。
Page<UserInfo> page = (Page<UserInfo>) userService.selectBy(userInfoDTO);
//总数
long total = page.getTotal();
//分页后得到的结果
List<UserInfo> result = page.getResult();

PageHelper 示例二:

如果分页之后,还需要进行数据转换,如下:

//设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);
//查询并分页
//userService.selectBy(userInfoDTO) 是查询的方法,替换成自己的查询方法即可。
List<UserInfo> resultList = userService.selectBy(userInfoDTO);
//可以在此进行数据转换
//...

PageInfo<UserInfo> pageInfo = new PageInfo<>(resultList);
//通过pageInfo得到总数,而不是每页的数量
long total = pageInfo.getTotal();
//获取结果集
List<UserInfo> list = pageInfo.getList();


标签:分页,PageHelper,PageInfo,startPage,Page,select,入门
来源: https://www.cnblogs.com/expiator/p/16030860.html