SpringBoot集成PageHelper分页插件
发布时间:2025-05-21 10:20:18 发布人:远客网络
一、SpringBoot集成PageHelper分页插件
步骤一、导入jar包<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.5</version></dependency>步骤二、配置SpringBoot文件
在application.yaml配置文件中添加以下配置:
在application.yaml配置文件中添加以下配置:
pagehelper.helper-dialect:指定分页插件使用哪种语言
pagehelper.offset-as-page-num:默认为false,该参数对使用RowBounds作为分页参数时有效,当为true时,会将RowBounds的offset参数当成pageNum使用
pagehelper.row-bounds-with-count:默认为false,该参数对使用RowBounds作为分页参数时有效,当该参数值为true时,使用RowBounds分页会进行count查询
pagehelper.page-size-zero:默认为false,当该参数为true时,如果pageSize=0或者RowBounds.limit=0就会查询所有结果
pagehelper.reasonable:分页合理化参数,默认为false,当该值为true,pageNum<=0默认查询第一页,pageNum>pages时会查询最后一页,false时直接根据参数进行查询
pagehelper.params:为了支持startPage(Objectparams)方法,增加该参数来配置参数映射,用于从对象中根据属性名取值,可以配置pageNum,pageSize,pageSizeZero,reasonable,不配置映射是使用默认值,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.support-methods-arguments:支持通过Mapper接口参数来传递分页参数,默认为false,分页插件会从查询方法的参数中根据params配置的字段中取值,查找到合适的就进行分页
pagehelper.auto-runtime-dialect:默认为false,为true时允许在运行时根据多数据源自动识别对应的方言进行分页
pagehelper.close-conn:默认为true,当使用运行是动态数据源或者没有设置helperDialect属性自动获取数据库类型时,会自动获取一个数据库连接,通过该属性来设置是否关闭获取的这个连接,默认为true关闭,false不会自动关闭
二、Mybatis分页插件-PageHelper
Mybatis分页插件-PageHelper是一个便捷的分页插件,支持Oracle、MySQL、MariaDB、SQLite、Hsqldb、PostgreSQL等六种数据库。最新版本为3.7.5,其中优化了PageInfo中的judgePageBoudary方法,修正了版本3.4.1中SqlParser解析SQL失败的问题,以及在版本3.4.0中增加了对@SelectProvider注解方法的支持,并改进了逻辑和减少了反射调用次数。
分页插件包含五个Java文件:Page、PageHelper、PageInfo、SqlParser和SqlUtil。使用时,需引入Page、PageHelper和SqlUtil到项目中,根据需求选择是否引入PageInfo和SqlParser。有三种引入方式:直接引入类、引入Jar包或使用Maven依赖。配置时,需在Mybatis配置xml中添加PageHelper拦截器插件,配置参数如dialect、rowBoundsWithCount、offsetAsPageNum、pageSizeZero和reasonable,根据场景选择合适的配置。对于Spring配置,可选择默认xml配置或使用Spring属性配置方式。
在代码中使用时,支持RowBounds方式和Mapper接口方式调用,推荐使用Mapper接口方式。通过PageHelper.startPage方法启动分页,紧跟其后的方法将被自动分页。使用PageInfo类包装查询结果以获取详细的分页信息。重要提示包括:只有紧跟PageHelper.startPage方法后的第一个查询方法会被分页,不支持带有for update语句的分页和关联结果查询。
三、Mybatis分页插件PageHelper的使用-
mybatis分页插件的配置可以在mybaits的配置文件进行配置,也可以在spring的配置文件中进行配置,两者配置其一即可
上面是 PageHelper官方给的配置和注释,虽然写的很多,不过确实描述的很明白。
dialect:标识是哪一种数据库,设计上必须。 offsetAsPageNum:将 RowBounds第一个参数 offset当成 pageNum页码使用 rowBoundsWithCount:设置为 true时,使用 RowBounds分页会进行 count查询 reasonable: value=true时, pageNum小于1会查询第一页,如果 pageNum大于 pageSize会查询最后一页
注:上面的配置只针对于pagehelper4.x版本的,如果你用的是pagehelper5.x版本就要这样配置,注意两个spring配置中的类名不同
1.在 MyBatis配置 xml中配置拦截器插件
2.在 Spring配置文件中配置拦截器插件
如果4.x的版本用了5.x的版本报错信息如下 springboot在启动项目的时候就会报错,报错信息有很多,主要是因为
总的来说就是缺少了 com.github.pagehelper.PageInterceptor,这个是新版拦截器,5.x版本才开始使用,所以在4.x版本这样配置是不行的
那么5.x版本的配置在pagehelper4.x上能生效吗?答案是不行报错信息如下
新版的拦截器PageInterceptor不能和旧版拦截器相互转换,所以还是不行的。
总的来说,pagehelper4.x就该用4.x的配置,pagehelper5.x就用5.x的配置(官方推荐)
使用mybatis的分页插件时报错: net.sf.jsqlparser.statement.select.PlainSelect.getGroupBy()Lnet/sf/jsqlparse
原因:在使用mybatis分页插件时,需要依赖 jsqlparser
PageHelper的不同版本依赖不同的jsqlparser版本
pageHelper4.x依赖版本 jsqlparser-1.3.jar
在配置完mybatis后,pagehelper的业务用法,就以分页查询用户列表为例
重点来了,然后在 service中,先开启分页,再进行查询,然后把查询结果集放入 PageInfo中
PageHelper.startPage(pageNum, pageSize);这句非常重要,这段代码表示分页的开始,意思是从第 pageNum页开始,每页显示 pageSize条记录。
PageInfo这个类是插件里的类,这个类里面的属性会在输出结果中显示,使用 PageInfo这个类,你需要将查询出来的 list放进去:
然后在 controller层调用该方法设置对应的 pageNum和 pageSize就可以了,我设置 pageNum为1, pageSize为5,看个输出结果吧
startRow当前页面第一个元素在数据库中的行号
endRow当前页面最后一个元素在数据库中的行号
total总记录数(所有符合条件的数据总数)
pages总页数(这个页数也很好算,每页5条,总共有11条,需要3页才可以显示完)