1、官网https://pagehelper.github.io/
2、集成springboot文档 https://github.com/pagehelper/pagehelper-spring-boot
使用细则:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
example:https://github.com/abel533/MyBatis-Spring-Boot
参数 |
说明 |
---|---|
dialect默认情况下会使用 PageHelper 方式进行分页,如果想要实现自己的分页逻辑,可以实现 Dialect(com.github.pagehelper.Dialect) 接口,然后配置该属性为实现类的全限定名称。 下面几个参数都是针对默认 dialect 情况下的参数。使用自定义 dialect 实现时,下面的参数没有任何作用。 |
|
helperDialect |
特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。
|
offsetAsPageNum |
|
rowBoundsWithCount |
|
pageSizeZero |
|
reasonable |
|
params |
|
supportMethodsArguments |
|
autoRuntimeDialect |
|
closeConn |
|
aggregateFunctions(5.1.5+) |
|
重要提示: |
4、查看pagehelper-spring-boot-starter 引用依赖的结构 (pagehelper-spring-boot/pagehelper-spring-boot-starter/pom.xml)
https://github.com/pagehelper/pagehelper-spring-boot/blob/master/pagehelper-spring-boot-starter/pom.xml
5、原理
(1)mybatis集成pagehelper,需要在Mybatis的配置文件中注册需要使用的Plugin ,
PageHelper中对应的Plugin实现类就是com.github.pagehelper.PageHelper自身
mybatis plugin 实则是org.apache.ibatis.plugin.Interceptor接口,
因为Interceptor的核心是其中的plugin(Object target)方法,而对于plugin(Object target)方法的实现,我们在需要对对应的对象进行拦截时会通过org.apache.ibatis.plugin.Plugin的静态方法wrap(Object target, Interceptor interceptor)返回一个代理对象,而方法入参就是当前的Interceptor实现类。
(2) PageHelper拦截的是org.apache.ibatis.executor.Executor的query方法
(3)ThreadLocal:
java.lang.ThreadLocal
(4)PageHelper.startPage(..): 这样PageHelper会把分页信息存入一个ThreadLocal变量中,在拦截到Executor的query方法执行时会从对应的ThreadLocal中获取分页信息,获取到了,则进行分页处理,处理完了后又会把ThreadLocal中的分页信息清理掉,以便不影响下一次的查询操作
(5)com.github.pagehelper.Page: 在进行分页查询时,我们的返回结果一般是一个java.util.List,PageHelper分页查询后的结果会变成com.github.pagehelper.Page类型,其继承了java.util.ArrayList,我们自己声明mapper 方法中的返回为List时也不会报错,因为做了强转
com.github.pagehelper.Page中包含有返回结果的分页信息,包括总记录数,总的分页数等信息,所以一般我们需要把返回结果强转为com.github.pagehelper.Page类型
6、框架集成
(1)导入maven依赖
只需要导入pagehelper-spring-boot-starter 依赖,其他的不需要
(2)配置pagehelper参数(配置几个常用核心参数,,其他参数可以根据业务情况配置)
注意: 在springboot 、mybatis、 pagehelper的集成中,不需要在手动为mybatis添加plugin, 因为pagehelper-spring-boot-starter 已经做了自动化配置