企业培训笔记:SpringBoot+MyBatis项目中实现分页查询

文章目录

  • PageHelper 简介
  • 一,pom.xml文件添加依赖
  • 二,PetMapper中添加分页查询方法
  • 三,PetMapper.xml定义对应SQL语句
  • 四,SpringBootMyBatisApplicationTests添加测试方法
  • 五,PageHelper说明
    • (一)PageHelper.startPage(2, 3)
    • (二)调用时机
    • (三)底层原理
    • (四)与 SQL 输出的对应关系
  • 六,运行testGetPetByPage()方法


PageHelper 简介

PageHelper 是一款针对 MyBatis 框架的开源分页插件,由国内开发者开发,旨在简化 MyBatis 中分页查询的开发流程。它通过拦截 SQL 执行过程,自动对查询语句进行分页处理,无需手动编写复杂的分页 SQL,极大提升了开发效率。
在这里插入图片描述

一,pom.xml文件添加依赖

1,将下面的代码,添加到pom.xml文件中。
在这里插入图片描述

<!--pagehelper分页插件依赖-->                                    
<dependency>                                               <groupId>com.github.pagehelper</groupId>               <artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version>                               
</dependency>                                              

2,刷新依赖,导入或下载到本地仓库。
在这里插入图片描述
3,如下图所示,成功导入依赖。
在这里插入图片描述

二,PetMapper中添加分页查询方法

在这里插入图片描述

// 分页查询宠物信息                     
public List<Pet> getPetByPage();

三,PetMapper.xml定义对应SQL语句

在这里插入图片描述

<!-- 分页查询宠物信息 -->                                          
<select id="getPetByPage" resultType="net.army.entity.Pet">select * from pet                                      
</select>                                                  

四,SpringBootMyBatisApplicationTests添加测试方法

在这里插入图片描述

// 测试分页查询宠物信息                                     
@Test                                             
void testGetPetByPage() {                         Page<Pet> page = PageHelper.startPage(2, 3);  List<Pet> pets = petMapper.getPetByPage();    System.out.println("总记录数:" + page.getTotal());System.out.println("总页数:" + page.getPages()); for (Pet pet : pets) {                        System.out.println(pet);                  }                                             
}                                                 

五,PageHelper说明

(一)PageHelper.startPage(2, 3)

Page<Pet> page = PageHelper.startPage(2, 3);

startPage(2, 3):

  • 参数一:表示页码(即第几页),从 1 开始计数(PageHelper 默认约定)。
  • 参数二:表示每页的记录数(即每页显示2条数据)。
  • 返回值 P a g e < P e t > Page<Pet> Page<Pet>:PageHelper 会创建一个 Page 对象,用于存储分页信息(如页码、每页大小、总记录数等),并绑定到当前线程。后续执行的 SQL 查询会自动应用分页逻辑。

(二)调用时机

必须在执行 SQL 查询前调用 startPage,否则分页无效。

PageHelper.startPage(2, 3); // 开启分页
List<Pet> petList = petMapper.selectAll(); // 执行查询,SQL 会自动添加 LIMIT

(三)底层原理

PageHelper 通过 MyBatis 拦截器 实现分页。当调用 startPage 后,它会:

  1. 拦截后续的 SQL 查询,根据页码和每页大小生成分页语句(如 MySQL 的 L I M I T ? , ? LIMIT ?, ? LIMIT?,?)。
  2. 自动执行 COUNT 查询获取总记录数(除非手动禁用)。
  3. 将分页结果封装到 Page 对象中。

(四)与 SQL 输出的对应关系

分页查询中对应的 SQL 语句为:

select * from pet LIMIT 3, 3
  • 第一个3:偏移量(OFFSET),计算方式为 (页码-1)×每页大小,即 (2-1)×3=3。
  • 第二个3:每页记录数(LIMIT)。

六,运行testGetPetByPage()方法

1,单击绿色运行按钮。
在这里插入图片描述

2,单击【Run ‘testGetPetByPage()’】。

在这里插入图片描述

3,查看控制运行结果。

在这里插入图片描述