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.hqwc.cn/news/637104.html

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

相关文章

05集合-CollectionListSet

Collection体系的特点、使用场景总结 如果希望元素可以重复&#xff0c;又有索引&#xff0c;索引查询要快? 用ArrayList集合, 基于数组的。(用的最多) 如果希望元素可以重复&#xff0c;又有索引&#xff0c;增删首尾操作快? 用LinkedList集合, 基于链表的。 如果希望增…

Pytorch入门实战: 06-VGG-16算法-Pytorch实现人脸识别

第P6周&#xff1a;VGG-16算法-Pytorch实现人脸识别 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 &#x1f3e1; 我的环境&#xff1a; 语言环境&#xff1a;Python3.8 编译器&#xff1a;Jupyter La…

映射调试上下文MDC

1.简介 MDC 介绍​ MDC&#xff08;Mapped Diagnostic Context&#xff0c;映射调试上下文&#xff09;是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map&#xff0c;可以往其中添加键值对。MDC 中包含的内容可以被同…

英特尔直面AMD强势出击,新Xeon CPU 3D堆叠 288核

英特尔的新Xeon CPU直面AMD&#xff1a;3D堆叠 288核&#xff01; 英特尔加速其“四年五个节点”战略&#xff0c;计划在 2025 年推出搭载 3D 堆叠技术的 Clearwater Forest Xeon 数据中心 CPU。采用新的封装技术&#xff0c;该芯片将采用 tile-based CPU 设计&#xff0c;旨在…

外贸客户开发软件哪个好用一点,效果好数据精准的?

选择外贸客户开发软件时&#xff0c;你需要考虑软件的功能、易用性、数据质量以及价格等因素。以下是一些常用的外贸客户开发软件&#xff0c;它们都具有不同的特点和优势&#xff1a; 易谷歌地图数据采集大师&#xff1a; 专为做外贸的朋友开发的一款基于谷歌地图数据采集的软…

Web 应用最安全的会话实现和保持方式是什么?

目录 什么是会话管理 保障会话安全的关键 什么是 Set-Cookie Set-Cookie header 头 基于 Set-Cookie 实现会话管理示例 什么是会话管理 什么是会话管理&#xff1f; 会话管理是一种在无状态的 HTTP 协议上保持用户状态的技术&#xff0c; Web 服务器通过会话管理可以识别…

win32-显示窗口、消息循环、消息队列

承接上文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口 本文目录 显示窗口 ShowWindow function (winuser.h)消息循环消息基础MSG 结构体的定义 MSG structure (winuser.h)POINT structure 结构体 (windef.h)DispatchMessage() 如何将消息派发给窗口…

XS9922驱动

XS9922B 是一款四通道多合一模拟高清解码器&#xff0c;支持HDcctv高清协议和CVBS标清协议。它最大支持1080p 30fps的视频分辨率&#xff0c;具有以下亮点&#xff1a; 四通道视频输入MIPI CSI-2 4-Lane视频输出支持音频传输封装&#xff1a;QFN88&#xff0c;尺寸为10mm x 1…

安装IntelliJ IDEA

文章目录 一、前言二、下载IDEA三、安装四、破解 一、前言 工欲善其事必先利其器&#xff0c;学习JAVA的第一步&#xff0c;首先是安装IDE&#xff0c;配置环境&#xff1b; 常用的JAVA IDE是IntelliJ IDEA和eclipse&#xff0c;我选择IntelliJ IDEA 二、下载IDEA 官网下载&…

MT3023 歌词中找单词

1.暴力 10/12 #include <bits/stdc.h> using namespace std; int n; string a[10005]; int main() {cin >> n;for (int i 0; i < n; i)cin >> a[i];string ll;cin >> ll;for (int i 0; i < n; i){string u a[i];int num 0;int j 0;for (in…

算法课程笔记——STL题目

长度为2的字符串&#xff0c;当in下标为一&#xff0c;也就是\n,当i&#xff01;n&#xff0c;就是输出空格 &&且 city从citys里面取 加速后就不能混用scanf

MySql运维篇

目录 一.日志 1.1日志分类 1.2Error Log 1.3BinaryLog 1.4SlowQuery Log 二.备份 2.1备份原因 2.2备份目标 2.3备份技术 2.3.1物理备份 2.3.2逻辑备份 2.4备份方式 2.4.1完全备份 2.4.2增量备份 2.4.3差异备份 2.5备份环境准备 2.6完全备份实验 2.6.1完全备…