MyBatis 从入门到精通:分页在MyBatis中使用

MyBatis 从入门到精通:分页在MyBatis中使用

    • 先欣赏下美女
    • 🚀分页在MyBatis中使用
    • 👩‍💻摘要
    • 🎯引言
    • 💡正文内容
      • 😕 为什么要分页?
      • 🚀 使用Limit分页介绍
      • 📄 使用Limit分页
        • 1. 分页接口定义
        • 2. Mapper.xml配置
        • 3. 分页测试
      • 🚀 RowBounds分页介绍
      • 📄 RowBounds分页
        • 1. 分页接口定义
        • 2. Mapper.xml配置
        • 3. 分页测试
      • 📄 分页插件
    • 🤔QA环节
    • 📝小结
    • 📊表格总结
    • 🌟总结
    • 📚参考资料

在这里插入图片描述

先欣赏下美女

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页——默语的博客👦🏻
《Java面试题大全》
《Java专栏》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MySQL从入门到精通》数据库是开发者必会基础之一~
🪁吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进!💻⌨


🚀分页在MyBatis中使用

👩‍💻摘要

本文介绍了MyBatis中分页技术的几种实现方式,包括使用Limit分页和RowBounds分页,以及分页插件的简要了解。

🎯引言

在大型数据处理场景下,合理的分页技术是提高系统性能的关键之一。MyBatis作为一款优秀的持久化框架,在分页处理方面提供了多种选择,本文将深入探讨这些技术的应用。

💡正文内容

😕 为什么要分页?

分页技术是一种在处理大量数据时常用的方法,它的主要目的是优化系统性能和提高用户体验。分页的主要好处包括:

提高性能: 一次性加载大量数据可能会导致系统性能下降,特别是对于网络连接较慢或设备资源有限的情况。通过分页加载数据,可以减少每次请求所需的数据量,从而提高系统的响应速度。
减少内存占用: 在内存有限的情况下,一次性加载大量数据可能会导致内存溢出。通过分页加载数据,可以将数据分成多个页面,每次只加载一页数据,从而减少内存占用。
提高用户体验: 分页技术可以让用户逐页浏览数据,而不是一次性展示所有数据。这样做不仅可以减少用户等待时间,还可以提高用户体验,让用户更轻松地浏览和搜索所需的信息。

🚀 使用Limit分页介绍

Limit分页通过SQL语句中的LIMIT关键字实现分页,是一种简单而直观的分页方式。在MyBatis中,可以轻松地通过传递参数来实现分页。

当处理大量数据时,一次性加载所有数据可能会影响性能并增加系统负担。为了提高性能和用户体验,常常会采用分页技术。LIMIT 分页是一种在 SQL 查询中使用的简单而有效的分页技术,主要通过在查询语句中使用 LIMIT 关键字来实现。

在 SQL 查询语句中,LIMIT 关键字用于指定返回结果的起始位置和数量。它的一般语法如下:

SELECT column1, column2, ...
FROM table_name
LIMIT offset, count;

其中:

  • offset 指定了返回结果的起始位置(从0开始计数),表示要跳过的前几行记录。
  • count 指定了要返回的记录数量。

举个例子,如果想要查询从第 20 行开始的 10 条记录,可以这样写:

SELECT column1, column2, ...
FROM table_name
LIMIT 20, 10;

在这个查询中,LIMIT 20, 10 表示从第 20 行开始返回 10 条记录。

在实际应用中,可以将 LIMIT 分页与 ORDER BY 结合使用,以确保返回的结果是按照指定的顺序排列的。比如,如果想要按照某个字段的升序或降序排列,并分页返回结果,可以这样写:

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT offset, count;

LIMIT 分页是一种简单而直观的分页方式,适用于大多数数据库系统,并且能够有效提高系统性能和用户体验。


📄 使用Limit分页

语法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3;  #[0,n]

在MyBatis中实现分页的核心SQL操作。

1. 分页接口定义
// 分页
List<User> getUserByLimit(Map<String,Integer> map);
2. Mapper.xml配置
<!-- 分页 -->
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
3. 分页测试
@Test
public void getUserByLimit(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("startIndex",1);map.put("pageSize",2);List<User> userList =  mapper.getUserByLimit(map);for (User user : userList) {System.out.println(user);}sqlSession.close();
}

🚀 RowBounds分页介绍

RowBounds分页不再依赖SQL语句,而是通过Java代码层面实现分页。虽然相对于Limit分页更为灵活,但在处理大数据量时可能性能略有损耗。

RowBounds 分页是 MyBatis 中一种基于 Java 代码层面实现分页的方法。与传统的在 SQL 语句中使用 LIMIT 关键字不同,RowBounds 分页不依赖于 SQL 语句,而是在查询结果返回后,在 Java 代码中对结果进行切片和处理来实现分页效果。

使用 RowBounds 分页,你可以通过指定起始位置和每页数量的方式来控制返回结果的范围。在 MyBatis 中,可以通过 RowBounds 对象来实现这一目的。

以下是一个简单的示例:

import org.apache.ibatis.session.RowBounds;
import java.util.List;public interface UserMapper {List<User> getUsersWithRowBounds(RowBounds rowBounds);
}

在 XML 映射文件中,你可以调用该方法,并在参数中传入 RowBounds 对象,指定分页的起始位置和数量。例如:

<select id="getUsersWithRowBounds" resultType="User">SELECT * FROM users
</select>

在调用该方法时,可以创建一个 RowBounds 对象并传入,指定起始位置和数量,例如:

int offset = 20; // 起始位置
int limit = 10; // 每页数量
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> users = userMapper.getUsersWithRowBounds(rowBounds);

使用 RowBounds 分页相对于在 SQL 语句中使用 LIMIT 更加灵活,因为它可以在不修改 SQL 查询语句的情况下进行分页。然而,在处理大数据量时,RowBounds 分页可能会略微影响性能,因为它需要在 Java 代码中进行结果的切片和处理。

📄 RowBounds分页

不再依赖SQL来实现分页。

1. 分页接口定义
// 分页2
List<User> getUserByRowBounds();
2. Mapper.xml配置
<!-- 分页2 -->
<select id="getUserByRowBounds" resultMap="UserMap">select * from mybatis.user
</select>
3. 分页测试
@Test
public void getUserByRowBounds(){SqlSession sqlSession = MybatisUtils.getSqlSession();// RowBounds实现RowBounds rowBounds = new RowBounds(1, 2);// 通过Java代码层面实现分页List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserByRowBounds", null, rowBounds);for (User user : userList) {System.out.println(user);}sqlSession.close();
}

📄 分页插件

了解分页插件,若未来在工作中需要用到,能够理解其作用。

在这里插入图片描述

🤔QA环节

  • 问:分页插件适用于哪些场景?
    答:分页插件适用于需要更灵活、更高定制化的分页需求,比如复杂的分页逻辑或特殊的业务场景。

📝小结

通过本文的介绍,读者应该对MyBatis中的分页技术有了更深入的了解。合理地运用分页技术能够提高系统性能,提升用户体验。

📊表格总结

分页方式优点缺点
Limit分页实现简单,直观在处理大数据量时可能性能有损耗
RowBounds分页灵活,可以在Java代码中动态控制分页逻辑性能相对较差,不适合处理大数据量
分页插件提供了更高度的定制化和扩展性学习成本较高,不适合简单的分页需求

🌟总结

本文详细介绍了MyBatis中的分页技术,包括Limit分页、RowBounds分页以及分页插件的应用。通过合理地选择和运用分页技术,能够有效提高系统性能,提升用户体验。

📚参考资料

  • MyBatis官方文档
  • MyBatis分页插件GitHub仓库

在这里插入图片描述


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(TcpServer板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器&#xff08;TcpServer板块&#xff09; 一、思路图二、模式关系图三、定时器的设计1、Linux本身给我们的定时器2、我们自己实现的定时器&#xff08;1&#xff09;代码部分&#xff08;2&#xff09;思…

Linux华硕笔记本安装ROG Asusctl

基础环境 适用系统&#xff1a; linux mint 21ubuntu 22.04 安装版本&#xff1a; asusctl-5.0.10rust 1.77.2 构建 安装编译环境 sudo apt-get update sudo apt-get install -y \libasound2-dev \libfreetype6-dev \libexpat1-dev \libxcb-composite0-dev \libssl-dev …

数字谐振器设计

数字谐振器设计 电路里的谐振:当电路中激励的频率等于电路的固有频率时&#xff0c;电路电磁振荡的振幅也将达到峰值。 形式一 形式二 例子

4.21java聊天室项目小结

基本完成了用户的登录注册功能&#xff0c;可以实现用户账号登录和邮箱登录功能&#xff0c;忘记密码通过邮箱发送验证码找回&#xff0c;注册账号功能&#xff0c;并传递给客户端更新数据库的表内容 注册功能&#xff1a; 注册成功后密码进行MD5加密并通过服务器保存到数据库…

springboot结合elasticJob

先说一说什么是elasticJob。 ElasticJob是一个分布式任务调度的解决方案&#xff0c;它由俩个相互独立的子项目Elastic-job-lite和Elastic- job-cloud组成。 任务调度&#xff1a;是指系统为了自动完成特定任务&#xff0c;在任务的特定时刻去执行任务的过程。 分布式&#xf…

剑指offer剪绳子;leetcode:LCR 131. 砍竹子 I

现需要将一根长为正整数 bamboo_len 的竹子砍为若干段&#xff0c;每段长度均为正整数。请返回每段竹子长度的最大乘积是多少。 示例 1&#xff1a; 输入: bamboo_len 12 输出: 81提示&#xff1a; 2 < bamboo_len < 58 注意&#xff1a;本题与主站 343 题相同&#…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

Ubuntu 20.04.06 PCL C++学习记录(二十六)

[TOC]PCL中点云配准模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16&#xff0c;可用点云下载地址 学习内容 在代码中使用ICP迭代最近点算法&#xff0c;程序随机…

2024上海(国际)智慧氧舱暨生物细胞博览会

2024上海(国际)智慧氧舱暨生物细胞博览会 时间 2024年9月21日-23日 地址 上海市浦东新区张江科学会堂 展会亮点 展示国内外医疗器械行业最新发展动态&#xff0c;探讨医疗器械行业发展趋势促进医疗 器械行业健康发展将为全国从事微高压氧舱、医用气调库及其他医用设备、医…

二极管分类及用途

二极管分类及用途 通用开关二极管 特点&#xff1a;电流小&#xff0c;工作频率高 选型依据&#xff1a;正向电流、正向压降、功耗&#xff0c;反向最大电压&#xff0c;反向恢复时间&#xff0c;封装等 类型&#xff1a;BAS316 ; IN4148WS 应用电路: 说明&#xff1a;应用…

【Linux】引导过程与服务控制

目录 一、Linux操作系统引导过程 1.linux开机引导过程 2.系统初始化进程 1.init进程 2.进程启动方式 二、运行级别和Systemd单元类型 1.运行级别 2.Systemd 三、启动类故障恢复 1.修复MBR扇区故障 2.修复GRUB引导故障 3.root密码忘记的修改方式 四、系统服务控制 …

MATLAB求和函数

语法 S sum(A) S sum(A,“all”) S sum(A,dim) S sum(A,vecdim) S sum(,outtype) S sum(,nanflag) 说明 示例 S sum(A) 返回沿大小大于 1 的第一个数组维度计算的元素之和。 如果 A 是向量&#xff0c;则 sum(A) 返回元素之和。 如果 A 是矩阵&#xff0c;则 sum(A) 将…

配置静态路由实现全网互通

1、实验环境 如图下所示&#xff0c;三台路由器R1&#xff0e;R2&#xff0c;R3两两互连&#xff0c;每台路由器上都配置了Loopback地址模拟网络环境。 2、需求描述 需要在三台路由器上配置静态路由&#xff0c;以实现各网段之间的互通。 若要实现全网互通,必须明确如下两个问…

UI5 快速入门教程

环境准备 node >16.8 ,VSCode&#xff0c;官方网址 开始 创建一个根文件夹&#xff0c;根文件中创建一个package.json文件 {"name": "quickstart-tutorial","private": true,"version": "1.0.0","author":…

【JavaWeb】Day51.Mybatis动态SQL

什么是动态SQL 在页面原型中&#xff0c;列表上方的条件是动态的&#xff0c;是可以不传递的&#xff0c;也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中&#xff0c;我们会看到&#xff0c;我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

java优先级队列(堆)详解

一、优先级概念 什么是优先级&#xff1a;比如女士优先&#xff0c;个子低的优先排到前面去&#xff0c;有一部分数据具备优先级&#xff0c;要以优先级的顺序将顺序存储起来。 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#…

Java:String类

目录 1.String类的重要性2.String对象的比较2.1 比较是否引用同一个对象2.2 boolean equals(Object anObject) 方法&#xff1a;按照字典序比较2.3int compareTo(String s)方法: 按照字典序进行比较2.4 boolean equalsIgnoreCase(Object anObject)方法&#xff1a;忽略大小写的…

word批量修改表格样式

利用宏&#xff0c;批量选中表格&#xff0c;然后利用段落和表设计来操作。 利用宏&#xff0c;批量选中表格&#xff0c;参考百度安全验证段落&#xff0c;表格里面的内容有空格&#xff0c;应该是有缩进&#xff0c;在段落中去掉缩进&#xff0c;即缩进-特殊&#xff0c;选择…

node的事件循环

异步同步啥的就不多说了&#xff0c;直接看node中有哪些是异步 其中灰色部分和操作系统有很大的关系&#xff0c;就不多说了&#xff0c;其中定时器属于timers队列&#xff0c;I/O操作属于poll队列&#xff0c;setImmediate属于check队列&#xff0c;其中nextTick和promise不属…