从MySQL基本语句的分页查询到MyBatis再到MyBatis-plus

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: # 引言在实际开发中,我们为了提高页面的响应速度,也为了优化用户的体验,同时也减少流量和性能的消耗,往往在面对大量数据时会采取分页的操作。接下来这篇文章我带大家从原生的SQL语句中的分页到MyBatis中去分页,最后我们再看一下MyBatis-plus下的分页操作。# MySQL的分页(分页在SQL层面的原理)MySQL 分页操作可以使用 `LIMIT` 和 `OFFSET` 子句来实现。例如,如果想从一个 `users` 表中选择第二页(每页显示 10 条记录)的数据,可以使用以下查询:```SELECT * FROM users LIMIT 10 OFFSET

引言

在实际开发中,我们为了提高页面的响应速度,也为了优化用户的体验,同时也减少流量和性能的消耗,往往在面对大量数据时会采取分页的操作。

接下来这篇文章我带大家从原生的SQL语句中的分页到MyBatis中去分页,最后我们再看一下MyBatis-plus下的分页操作。

MySQL的分页(分页在SQL层面的原理)

MySQL 分页操作可以使用 LIMITOFFSET 子句来实现。

例如,如果想从一个 users 表中选择第二页(每页显示 10 条记录)的数据,可以使用以下查询:

SELECT * FROM users LIMIT 10 OFFSET 10;

这将从第 11 条记录开始,选择后面的 10 条记录。

如果想选择前 10 条记录,可以使用以下查询:

SELECT * FROM users LIMIT 10;

我们还可以将 LIMITOFFSETWHERE 子句一起使用,以筛选数据。例如,如果想选择所有状态为 "active" 的用户,并从第二页开始(每页显示 10 条记录),可以使用以下查询:

SELECT * FROM users WHERE status = 'active' LIMIT 10 OFFSET 10;

MyBatis中使用分页

在 MyBatis 中使用分页,同样使用 LIMITOFFSET 子句,并通过参数传递给 SQL 语句。

例如,如果有一个名为 UserMapper 的接口和一个对应的 XML 映射文件,你可以在 XML 映射文件中定义如下分页查询:

<select id="selectUsers" resultType="com.example.User">
  SELECT * FROM users
  WHERE status = #{status}
  LIMIT #{limit} OFFSET #{offset}
</select>

然后,我们可以在 UserMapper 接口中使用以下方法调用分页查询:

List<User> selectUsers(@Param("status") String status, @Param("offset") int offset, @Param("limit") int limit);

我们也可以可以通过调用该方法来选择状态为 "active" 的用户,并从第二页开始(每页显示 10 条记录)

List<User> users = userMapper.selectUsers("active", 10, 10);

mybatis-plus如何分页呢

Mybatis Plus 是一个 Mybatis 的增强工具,可以简化 Mybatis 的使用,并提供一些额外的功能。

在 Mybatis Plus 中使用分页,你需要使用 com.baomidou.mybatisplus.extension.plugins.pagination.Page 类。 该类是一个分页信息对象,包含了当前页码、每页大小等信息。

值得一提的是,MyBatis-plus是对MyBatis的一个升级,一个增强,一个扩展,引入他到你的项目中并不会对之前的MyBatis有什么影响,你可以很丝滑的在项目中去使用他。

例如,如果你想查询第二页(每页显示 10 条记录)的用户数据,可以使用以下代码:

Page<User> page = new Page<>(2, 10);
List<User> users = userMapper.selectPage(page, null);

其中,第一个参数是 Page 对象,第二个参数是查询条件。

然后,你可以使用 page.getTotal() 方法获取总记录数,page.getRecords() 方法获取当前页的数据列表。

注意,在 Mybatis Plus 中,你需要在对应的 XML 映射文件中启用分页插件,才能使用分页功能。例如:


<!-- 在mapper节点上启用分页插件 -->
<mapper namespace="com.example.UserMapper">
  <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
</mapper>

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
38 3
|
7天前
|
Java 关系型数据库 数据库连接
|
1月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
2月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
30 4
|
2月前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
47 2
|
1月前
|
XML 关系型数据库 MySQL
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
|
1月前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
2月前
|
Java 关系型数据库 MySQL
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
3.MyBatis和SpringBoot整合及MyBatis-plus与SpringBoot整合
32 0
|
2月前
|
JSON 前端开发 数据格式
MyBatis-Plus动态分页查询
MyBatis-Plus动态分页查询
24 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
20 0

热门文章

最新文章