PageHelper的使用
PageHelper的使用
PageHelper
pagehelper是mybatis的一个插件,其作用是更加方便地进行分页查询
分页查询的实现有两种方式
1:直接在sql中使用 limit子句 进行分页查询
limit关键字的用法是:LIMIT [offset,] rows
select * from tableA limit 5,5;
Ps1:offset是相对于首行的偏移量(首行是0),rows是返回条数
Ps2:mapper中可以传变量,即在实际使用的时候 “offset与rows”可以用变量替代
2:使用第三方库进行分页查询,如mybatis的插件pagehelper
使用PageHelper的好处是在实际项目开发中更方便
原因是:在项目中我们执行一个分页查询时,很多时候还会需要知道该查询的其他信息,如总数、每页数量、当前页数、上一页或下一页等等,这些信息如果每次都自己写的话就太麻烦了,而pagehelper能够帮助我们更方便地获取这些信息,大大方便了我们的开发效率。
PageHelper在SpringBoot中的使用
一:导入插件
1:pom.xml中导入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
注意导入的依赖是spring版本的而不是其独立版本,否则pagehelper将不起作用
2:在springboot配置文件(applicable.yml)中声明插件
#pagehelper分页插件配置 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql
二:在业务代码中使用
1:UserMapper
@Repository @Mapper public interface UserMapper { public List<User> selectAll(); }
2:UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.springboot.springboot_mybatis.mapper.UserMapper"> <select id="selectAll" resultType="User"> select * from user </select> </mapper>
优点:不需要使用limit
3:实体类
4:service层
5:service实现类
@Service public class QueryUser2 implements Query2 { @Autowired UserMapper userMapper; @Override public List<User> selectAll(int pageNum,int pageSize) { PageHelper.startPage(pageNum,pageSize); List<User> users = userMapper.selectAll(); PageInfo<User> pageInfo = new PageInfo<>(users); return pageInfo.getList(); } }
注意:只有紧跟着PageHelper.startPage(pageNum,pageSize)的sql语句才被pagehelper起作用
再次注意:经过再次验证,上面这句话不是扯淡
6:control类
@RestController public class controller3 { @Autowired Query2 query2; @GetMapping("/selectAll") public List<User> selectAll(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize){ List<User> users = query2.selectAll(pageNum,pageSize); return users; } }
使用中遇到的问题及tips:
1:在使用时pagehelper不起作用
注意pom.xml导入的依赖应该是spring版本的而不是其独立的版本

2:注意:只有紧跟着PageHelper.startPage()的sql语句才被pagehelper起作用
@Service public class QueryUser2 implements Query2 { @Autowired UserMapper userMapper; @Override public List<User> selectAll(int pageNum,int pageSize) { PageHelper.startPage(pageNum,pageSize); List<User> users = userMapper.selectAll(); System.out.println(users); List<User> users1 = userMapper.selectAll(); System.out.println(users1); PageInfo<User> pageInfo = new PageInfo<>(users); return pageInfo.getList(); } }
控制台的输出
Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=8, pages=4, reasonable=true, pageSizeZero=false}[User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}] [User{username='zhangsan', age=18, address='beijin'}, User{username='lisi', age=17, address='tianjing'}, User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}, User{username='dfwfd', age=22, address='dfdfd'}, User{username='dfdsettythg', age=45, address='ghgf'}, User{username='ggghgd', age=54, address='dfdf'}, User{username='dfdeg', age=21, address='fghgd'}]
可以看到只有紧跟着PageHelper.startPage()的那一句起了作用(注意,经过再次验证,这里不是扯淡,其原理可能是“PageHelper.startPage(pageNum,pageSize)在使用的时候启动了一个线程,致使了其能达到这个效果”)
注意,根据控制台可以得知,查询语句的返回结果“users”已经是分页之后的结果了,上面的例子没有写错;将users再传入PageInfo的目的是为了去除暂时用不到的其他信息,得到纯净的数据库信息:pageInfo.getList()
3:PageInfo的信息非常全,查询的个数、上一页、下一页等等信息都有,以上面springboot中的例子为例
PageInfo{pageNum=2, pageSize=2, size=2, startRow=3, endRow=4, total=8, pages=4, list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=8, pages=4, reasonable=true, pageSizeZero=false}[User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}], prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=4, navigatepageNums=[1, 2, 3, 4]}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-04-28 Git的smart Checkout跟force checkout的区别
2021-04-28 使用git merge --squash,让commit变得优雅不想在合并分支时体现你多次commit合并一条显示
2020-04-28 什么是SAP ECC企业控制中心系统 ECC简介
2018-04-28 asp.net mvc Controller控制器返回类型
2014-04-28 _appstart.cshtml,_pagestart.cshtml,_viewstart.cshtml
2012-04-28 SQL Server 2012大幅增强T-SQL支持分页
2012-04-28 Response.Write(js脚本)后 Response.redirect(...),为什么js脚本不执行,怎么解决!