当前位置: 首页 > news >正文

Mybatis是如何进行分页的?

大家好,我是锋哥。今天分享关于【Mybatis是如何进行分页的?】面试题。希望对大家有帮助;

Mybatis是如何进行分页的?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

MyBatis 实现分页的方式有很多种,最常见的方法是通过 SQL 查询语句中的 LIMITOFFSET,或者通过使用分页插件来简化开发。以下是 MyBatis 中实现分页的几种常见方式:

1. 手动编写分页 SQL

在 MyBatis 中,最直接的分页方式是手动在查询的 SQL 语句中加入分页的 LIMITOFFSET(针对 MySQL)或 ROWNUM(针对 Oracle)等分页关键字。

示例:MySQL 分页

假设我们有一个用户表 users,可以通过如下 SQL 语句进行分页查询:

<select id="selectUsers" resultType="User">SELECT * FROM usersLIMIT #{offset}, #{limit}
</select>
  • #{offset} 表示查询的起始位置,通常是 (页数 - 1) * 每页记录数
  • #{limit} 表示每页的记录数。

调用时,传入分页参数,例如:

int offset = (pageNum - 1) * pageSize;
List<User> users = sqlSession.selectList("selectUsers", Map.of("offset", offset, "limit", pageSize));
示例:Oracle 分页

对于 Oracle 数据库,分页通常通过 ROWNUMROW_NUMBER() 来实现:

<select id="selectUsers" resultType="User">SELECT * FROM (SELECT a.*, ROWNUM rnum FROM users a WHERE ROWNUM <= #{end}) WHERE rnum > #{start}
</select>

调用时,传入分页参数,例如:

int start = (pageNum - 1) * pageSize;
int end = pageNum * pageSize;
List<User> users = sqlSession.selectList("selectUsers", Map.of("start", start, "end", end));

这种方法的缺点是每次都需要手动编写分页逻辑,且与数据库的分页语法紧密耦合。

2. 使用 MyBatis 分页插件

为了简化分页的实现,可以使用第三方分页插件。常见的 MyBatis 分页插件有 PageHelperMyBatis-Plus

使用 PageHelper 插件

PageHelper 是一个非常流行的 MyBatis 分页插件,它通过拦截 SQL 查询并动态生成分页 SQL 语句来实现分页功能。

  1. 添加依赖: 如果使用 Maven,可以在 pom.xml 文件中添加 PageHelper 依赖:

    <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version>
    </dependency>
    

  2. 配置 PageHelper: 在 MyBatis 配置文件中配置 PageHelper 插件:

    <plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><property name="helperDialect" value="mysql" /><property name="reasonable" value="true" /></plugin>
    </plugins>
    

  3. 分页查询: 在调用分页查询时,直接使用 PageHelper.startPage() 方法来设置分页参数:

    PageHelper.startPage(pageNum, pageSize);
    List<User> users = userMapper.selectUsers(); // 这里的 selectUsers 是查询方法
    PageInfo<User> pageInfo = new PageInfo<>(users);
    

    PageHelper.startPage(pageNum, pageSize) 会在执行查询之前拦截 SQL 并修改其为分页查询,返回的结果会自动封装成 PageInfo 对象,里面包含了分页信息(总页数、总记录数等)。

使用 MyBatis-Plus 插件

MyBatis-Plus 是另一个流行的 MyBatis 扩展库,它也提供了简单易用的分页功能。

  1. 添加依赖: 如果使用 Maven,可以在 pom.xml 文件中添加 MyBatis-Plus 依赖:

    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.0</version>
    </dependency>
    

  2. 分页查询: 使用 MyBatis-Plus 提供的 Page 类来进行分页查询:

    Page<User> page = new Page<>(pageNum, pageSize);
    IPage<User> usersPage = userMapper.selectPage(page, null); // 第二个参数为查询条件
    List<User> users = usersPage.getRecords(); // 获取分页结果
    long total = usersPage.getTotal(); // 获取总记录数
    

    MyBatis-Plus 会自动处理分页逻辑,不需要手动编写分页 SQL,且支持多种数据库。

总结

MyBatis 中分页通常有以下几种方式:

  1. 手动编写 SQL:适合简单场景,但需要针对不同的数据库写不同的 SQL。
  2. 使用分页插件(如 PageHelper 或 MyBatis-Plus):插件方式更简洁,能够自动处理分页逻辑,减少开发工作量。

通常情况下,使用分页插件会更加方便和高效,特别是当项目需求中涉及到多种数据库或复杂的查询逻辑时。

相关文章:

Mybatis是如何进行分页的?

大家好&#xff0c;我是锋哥。今天分享关于【Mybatis是如何进行分页的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Mybatis是如何进行分页的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 实现分页的方式有很多种&#xff0c;最常见…...

【新春特辑】2025年春节技术展望:蛇年里的科技创新与趋势预测

&#x1f525;【新春特辑】2025年春节技术展望&#xff1a;蛇年里的科技创新与趋势预测 &#x1f4c5; 发布日期&#xff1a;2025年01月29日&#xff08;大年初一&#xff09; 在这个辞旧迎新的美好时刻&#xff0c;我们迎来了充满希望的2025年&#xff0c;也是十二生肖中的蛇…...

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(五)

Understanding Diffusion Models: A Unified Perspective&#xff08;五&#xff09; 文章概括基于得分的生成模型&#xff08;Score-based Generative Models&#xff09; 文章概括 引用&#xff1a; article{luo2022understanding,title{Understanding diffusion models: A…...

C++并发:C++内存模型和原子操作

C11引入了新的线程感知内存模型。内存模型精确定义了基础构建单元应当如何被运转。 1 内存模型基础 内存模型牵涉两个方面&#xff1a;基本结构和并发。 基本结构关系到整个程序在内存中的布局。 1.1 对象和内存区域 C的数据包括&#xff1a; 内建基本类型&#xff1a;int&…...

JavaScript函数中this的指向

总结&#xff1a;谁调用我&#xff0c;我就指向谁&#xff08;es6箭头函数不算&#xff09; 一、ES6之前 每一个函数内部都有一个关键字是 this &#xff0c;可以直接使用 重点&#xff1a; 函数内部的 this 只和函数的调用方式有关系&#xff0c;和函数的定义方式没有关系 …...

【java学习笔记】@Autowired注解 使用方法和作用 | 配合@Component注解使用 | IOC控制反转

原本在类中&#xff0c;要用什么对象&#xff0c;就直接new一个对象。这种原始的方式 是由应用本身去控制实例的。 用了Autowired注解后&#xff0c;就相当于把实例&#xff08;对象&#xff09;的控制权 交给外部容器来统一管理&#xff08;降低耦合&#xff09;。&#xff08…...

数论问题76一一容斥原理

容斥原理是一种计数方法&#xff0c;用于计算多个集合的并集中元素的个数&#xff0c;以避免重复计算。以下是其基本内容及相关公式&#xff1a; 两个集合的容斥原理 若有集合A和集合B&#xff0c;那么A与B的并集中元素的个数等于A集合元素个数加上B集合元素个数&#xff0c;再…...

python-leetcode-从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right r…...

【Oracle篇】使用Hint对优化器的执行计划进行干预(含单表、多表、查询块、声明四大类Hint干预)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…...

设置jmeter外观颜色

设置jmeter外观颜色 方法&#xff1a; 步骤一、点击顶部选项 ->外观&#xff0c;这里提供了不同的主题&#xff0c;可选自己喜欢的风格。 步骤二、选择后&#xff0c;弹框提示点击Yes。...

计算机网络 IP 网络层 2 (重置版)

IP的简介&#xff1a; IP 地址是互联网协议地址&#xff08;Internet Protocol Address&#xff09;的简称&#xff0c;是分配给连接到互联网的设备的唯一标识符&#xff0c;用于在网络中定位和通信。 IP编制的历史阶段&#xff1a; 1&#xff0c;分类的IP地址&#xff1a; …...

神经网络和深度学习

应用 类型 为什么近几年飞速发展 数据增长&#xff0c;算力增长&#xff0c;算法革新 逻辑回归 向量化 浅层神经网络(Shallow neural network) 单条训练数据前向传播计算表达式 batch训练数据前向传播计算表达式 反向传播计算表达式 参数随机初始化 不能全部设为0 原因是同一…...

MySQL 基础学习(3):排序查询和条件查询

MySQL 查询与条件操作&#xff1a;详解与技巧 在本文中&#xff0c;我们将探讨 MySQL 中的查询操作及其相关功能&#xff0c;包括别名、去重、排序查询和条件查询等&#xff0c;并总结一些最佳实践和注意事项。 一、使用别名&#xff08;AS&#xff09; 在查询中&#xff0c…...

webAPI -DOM 相关知识点总结(非常细)

title: WebAPI语法 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端WEB API 了解DOM的结构并掌握其基本的操作&#xff0c;体验 DOM 在开发中的作用 API简介 就是使用js来操作html和浏览器 什么是DOM? 就是一个文档对象模型&#xff0c;是用来呈现预计于任意htm…...

web集群

项目名称 基于keepalivednginx构建一个高可用、高性能的web集群 项目架构图 项目描述 构建一个基于nginx的7层负载均衡的web集群项目&#xff0c;模拟企业的业务环境达到构建一个高并发、高可用的web集群。通过压力测试来检验整个集群的性能&#xff0c;找出瓶颈&#xff0…...

Elasticsearch——Elasticsearch性能优化实战

摘要 本文主要介绍了 Elasticsearch 性能优化的实战方法&#xff0c;从硬件配置优化、索引优化设置、查询方面优化、数据结构优化以及集群架构设计等五个方面进行了详细阐述&#xff0c;旨在帮助读者提升 Elasticsearch 的性能表现。 1. 硬件配置优化 升级硬件设备配置一直都…...

不背单词快捷键(不背单词键盘快捷键)

文章目录 不背单词快捷键 不背单词快捷键 ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ    …...

kafka-保姆级配置说明(consumer)

bootstrap.servers #deserializer应该与producer保持对应 #key.deserializer #value.deserializer ##fetch请求返回时&#xff0c;至少获取的字节数&#xff0c;默认值为1 ##当数据量不足时&#xff0c;客户端请求将会阻塞 ##此值越大&#xff0c;客户端请求阻塞的时间越长&…...

1.五子棋对弈python解法——2024年省赛蓝桥杯真题

问题描述 原题传送门&#xff1a;1.五子棋对弈 - 蓝桥云课 "在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;" 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着"友谊第…...

python3+TensorFlow 2.x(三)手写数字识别

目录 代码实现 模型解析&#xff1a; 1、加载 MNIST 数据集&#xff1a; 2、数据预处理&#xff1a; 3、构建神经网络模型&#xff1a; 4、编译模型&#xff1a; 5、训练模型&#xff1a; 6、评估模型&#xff1a; 7、预测和可视化结果&#xff1a; 输出结果&#xff…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...