废话不多说,springboot版本号2.6.2,pagehelper版本号为1.4.1,这里要注意下,maven引用不能用下面这个
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
正确的引用是下面这个
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.1</version> </dependency>
其次需要在springboot的配置文件application.yml中配置pagehelp参数
pagehelper: supportMethodsArguments: true reasonable: false helperDialect: mysql params: count=countSql
最后在调用dao查询接口之前,调用方法
PageHelper.startPage(pageNum, pageSize, true); testService.getPageList(param);
注意,必须是调用查询方法之前就使用PageHelper.startPage,中间不能有其它的查询操作。因为PageHelper.startPage采用的是ThreadLocalL保存分页参数,然后在执行查询数据库sql时,通过拦截器PageInterceptor在sql语句中添加了分页参数,达到分页的目的,执行新的sql获取分页结果,最后在finally方法中清空ThreadLocalL。
所以这里PageHelper有个隐患,如果设置了PageHelper.startPage,之后的查询语句如果出现异常,就导致PageHelper中的ThreadLocalL仍然具有分页参数,如果此时有一个非分页的查询语句进来,这个时候就该查询就会被分页(而本不应该需要分页)。
还有一点,在多数据源的情况下,也要注意pagehelper的使用,默认它只会在一个数据源中起作用。