首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >重学SpringBoot3-MyBatis的三种分页方式

重学SpringBoot3-MyBatis的三种分页方式

作者头像
CoderJia
发布2024-10-18 09:06:09
发布2024-10-18 09:06:09
1.3K0
举报

MyBatis 是一个流行的持久层框架,它支持定制 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。分页是 Web 开发中常见的需求,尤其是处理大量数据时,合理的分页可以提高查询效率和用户体验。接下来,将介绍几种常用的 MyBatis 分页方式。

准备工作

环境搭建

参考上一篇文章重学SpringBoot3-整合SSM

SpringBoot3整合SSM结构
SpringBoot3整合SSM结构

数据准备

创建了 users 表,并准备了 15 条记录。

数据准备
数据准备

未分页效果

未分页查出全部15条数据
未分页查出全部15条数据

1. 使用MyBatis自带的RowBounds进行分页

RowBounds 是 MyBatis 提供的用于分页的一个简单工具,它通过 Java 代码的方式来实现分页功能。使用 RowBounds 时,只需要在 Mapper 的方法中添加 RowBounds 参数即可。

代码语言:javascript
复制
List<YourModel> selectByRowBounds(YourExample example, RowBounds rowBounds);

然后,在调用 Mapper 方法时传入 RowBounds 对象,其中包含了偏移量(offset)和限制量(limit)。

代码语言:javascript
复制
int offset = 0; // 起始位置
int limit = 10; // 每页显示的数据条数
RowBounds rowBounds = new RowBounds(offset, limit);
List<YourModel> list = yourMapper.selectByRowBounds(example, rowBounds);

演示

使用RowBounds
使用RowBounds
分页效果
分页效果

虽然 RowBounds 简单易用,但它并不是一种高效的分页方式,因为它是通过在数据库返回全部结果之后,在内存中进行分页处理,这在处理大量数据时会非常低效。

2. 使用物理分页插件

由于 RowBounds 的局限性,很多项目会选择使用物理分页插件如 PageHelper 来实现更高效的分页。PageHelper 是国内开发者为 MyBatis 定制的一个非常流行的分页插件,它能够实现真正意义上的物理分页。

首先引入 PageHelper 依赖最新版:

代码语言:javascript
复制
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

使用 PageHelper 非常简单,只需要在你的查询方法前调用 PageHelper.startPage 方法,传入页码和每页数量即可。

代码语言:javascript
复制
PageHelper.startPage(1, 10); // 页码,每页数量
List<YourModel> list = yourMapper.selectByExample(example);

PageHelper 会自动的对接下来的第一个 MyBatis 查询进行分页处理。它通过改写原 SQL 语句,在 SQL 执行层面实现分页,从而大大提高了分页的效率。

演示

使用PageHelper
使用PageHelper
分页效果
分页效果

3. 手动编写分页SQL

另外一种方式是直接在 SQL 语句中写入分页的逻辑,这通常适用于一些特定需求的情况,或者是在一些不想引入额外插件的项目中。

例如,在 MySQL 中可以使用 LIMIT 语句实现分页:

代码语言:javascript
复制
SELECT * FROM your_table LIMIT #{offset}, #{limit}

在 Mapper 的 XML 文件或注解中,可以这样使用:

代码语言:javascript
复制
@Select("SELECT * FROM your_table LIMIT #{offset}, #{limit}")
List<YourModel> selectByPage(@Param("offset") int offset, @Param("limit") int limit);

演示

手动编写分页SQL
手动编写分页SQL
分页效果
分页效果

这种方式虽然直接且灵活,但需要开发者手动计算偏移量,并且对于不同的数据库,分页的 SQL 语句可能会有所不同。

结论

对于 MyBatis 分页,推荐优先考虑使用物理分页插件如 PageHelper,因为它简单且高效。RowBounds 更适合小规模数据的快速实现,而手动编写分页 SQL 提供了最大的灵活性,适用于特殊需求的场景。在选择分页方式时,需要根据项目的实际需求和数据库的特性来做出决策。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
    • 环境搭建
    • 数据准备
    • 未分页效果
  • 1. 使用MyBatis自带的RowBounds进行分页
    • 演示
  • 2. 使用物理分页插件
    • 演示
  • 3. 手动编写分页SQL
    • 演示
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档