Spring Boot中的Mybatis分页插件-pagehelper的使用

简介: Spring Boot中的Mybatis分页插件-pagehelper的使用

很多时候我们写DAO层接口会写一个查询所有记录的方法,但是在数据量非常大的时候,查询所有记录会巨慢无比,这时我们就需要用到分页查询。pagehelper就是个很好的分页插件。

1,配置

pagehelper的项目地址:地址

我们只需在Maven中加入如下依赖即可:

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency>

2,执行分页查询

首先这里先写好DAO和Mapper XML的查询全部部分:

Mapper XML的select节点:

<selectid="getAll"resultMap="userResultMap">    select * from `user`
</select>

DAO:

/*** 获取全部用户*/List<User>getAll();

User类表示一个用户的POJO类。

然后在Service中写一个查询指定页的用户的方法:

@AutowiredprivateUserDAOuserDAO;
/*** 查询用户** @param pageNum  当前页码* @param pageSize 一页的记录数*/publicPage<User>getUserList(intcurrentPage, intpageSize) {
Page<User>userPage=PageHelper.startPage(currentPage, pageSize).doSelectPage(() ->userDAO.getAll());
returnuserPage;
}

使用PageHelper类即可很轻松的进行分页查询了!可见PageHelperstartPage方法用于指定要获取的当前页码和一页的记录数,startPage这个方法就设定了分页查询的基本参数,返回了个PageMethod对象,然后在此基础上,执行PageMethod对象的doSelectPage方法,这个方法中通过lambda语句执行我们Mybatis的查询全部方法,这样内部就自动完成了分页逻辑,并返回了指定页码的数据记录。

最后查询的结果是个Page对象,这个对象有如下方法:

  • getPageNum 获取当前的页码
  • getPages 获取总页数
  • getTotal 获取总记录数
  • getResult 获取当前页的数据记录,为一个List集合

所以在Controller中我们就可以通过调用Service取得结果的Page对象后,再调用getResult方法获取这一页的数据:

//查询第一页数据,每一页15条记录userService.getUserList(1, 15).getResult();

上述startPage方法第一个参数写0和1是一样的,都表示获取第一页。

3,优化分页模型

实际业务中通常会自己封装一个类表示我们分页查询后的结果:

importcom.github.pagehelper.Page;
importlombok.Getter;
importlombok.NoArgsConstructor;
importlombok.Setter;
importjava.io.Serializable;
importjava.util.List;
/*** 分页查询结果模型,存放整个结果分页基本信息和当前页信息以及内容*/@Setter@Getter@NoArgsConstructorpublicclassPaging<T>implementsSerializable {
/*** 当前页*/privateintcurrentPageNum;
/*** 总页数*/privateinttotalPageNum;
/*** 每页记录数量*/privateintpageSize;
/*** 总记录数*/privatelongtotalCount;
/*** 当前页记录集合*/List<T>dataCurrentPage;
/*** 传入Page结果对象构造Pageing对象** @param pageResult 分页查询结果Page对象*/publicPaging(Page<T>pageResult) {
this.currentPageNum=pageResult.getPageNum();
this.totalPageNum=pageResult.getPages();
this.totalCount=pageResult.getTotal();
this.pageSize=pageResult.getPageSize();
this.dataCurrentPage=pageResult.getResult();
    }
}

这里封装了一个Paging类,表示我们查询的分页结果类。然后改造上述Service的方法如下:

@AutowiredprivateUserDAOuserDAO;
/*** 查询用户** @param pageNum  当前页码* @param pageSize 一页的记录数*/publicPaging<User>getUserList(intcurrentPage, intpageSize) {
Page<User>userPage=PageHelper.startPage(currentPage, pageSize).doSelectPage(() ->userDAO.getAll());
Paging<User>userPaging=newPaging<User>(userPage);
returnuserPaging;
}

让Service处理我们得到的分页结果Page对象中所需要的属性,并放入我们自己的分页模型Paging并返回,这样更加方便。

相关文章
|
18天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
107 29
|
8天前
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
42 17
|
29天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
|
1月前
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
237 11
|
2月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
143 4
|
24天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
59 10
|
24天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
43 8
|
24天前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
54 8
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6

热门文章

最新文章