目录
一、springboot如何集成和使用PageHelper
1.1配置pom.xml
<!-- 分页插件pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
1.2配置application.properties
#pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
1.3 代码中应用
PageHelper.startPage(req.getPageNo(), req.getPageSize());
Page<GetPassDeviceAuthorizeRsp.AuthorizeBatchBean> authorizeBatchBeanPage = tblIssPassDeviceAuthorizeMapper.selectAuthorizeJoinPeople(req);
二、原理分析
PageHelper.startPage(req.getPageNo(), req.getPageSize());
这行代码似乎和下面的查询语句一点关系都没有,怎么就实现了分页的效果呢,接下来我们一起分析原理。
1、首先我们进入到startPage的方法里面,一路跟踪看到下面的代码,最终分页的信息是放到了ThreadLocal对象里面的,我们知道ThreadLocal对象又是存储在线程里面的。
2、pagehelper的jar包里面定义了一个拦截器,查询之前会先经过这个拦截器,所以重点就在这个拦截器里面啦~
3、此时我们从github上下载pagehelper的源码进行分析,里面有详细的注解。
github地址:https://github.com/pagehelper/Mybatis-PageHelper
https://github.com/pagehelper/pagehelper-spring-boot
下载之后导入到IDEA里面,此时我们看几个关键的步骤:
3.1拦截方法,处理分页
3.2 处理参数对象
注意此处的page对象就是从ThreadLocal中取出的。
接着往下走,到MySqlDialect类的processPageParameter方法,在这里把参数设置进去了。
3.3 处理sql
3.4执行查询动作
3.5 在PageInterceptor的intercept方法最后移除ThreadLocal对象,所以设置分页参数之后,只能对最近的一次查询生效。
文章如有不恰当之处,欢迎指出。