Mybatis-plus分页插件PageHelper的两种不同使用方式

最近在写需求的过程中接触到许多的分页,但是对于不同情况下会有不同的分页方法选择,由于目前使用得比较多的是mybatis-plus里面的分页插件,因此通过本文详细了解一下pageHelper的使用。

分页最终都是在sql中通过limit完成,limit offset,pageSize

PageHelper.startPage

功能特点:

PageHelper.startPage 是 PageHelper 提供的最常用的分页方法。它通过拦截器的方式,在 SQL 查询前自动执行分页操作,生成分页的 SQL 语句,包括查询总数和查询指定页码的数据。并将分页查询的信息存储在 PageInfo 对象中,包括总记录数、总页数、当前页码等信息。

使用方法:

PageHelper.startPage(pageNum, pageSize); // 执行查询操作
List<User> userList= userMapper.selectUsers(); 
PageInfo<User> pageInfo = new PageInfo<>(userList);
优点:
  • 简单易用,使用起来方便快捷。
  • PageInfo 对象提供了丰富的分页信息,方便对分页结果进行操作和展示。
缺点:
  • 需要查询总数,可能在处理大数据量时影响查询性能。
  • 对于大数据量,如果只需要当前页数据而不关心总数,会浪费查询时间。

PageMethod.offsetPage

功能特点:

PageMethod.offsetPage 是 PageHelper 提供的另一种分页方式。它通过在查询方法中手动指定偏移量和每页条数来实现分页,不进行总数查询,因此适合处理大数据量的分页查询。

使用方法:

 PageMethod.offsetPage(offset, pageSize, false);
// 执行查询操作
List<User> userList = userMapper.selectUsers();
优点:

避免了查询总数,性能较好,适合于大数据量的分页查询。
灵活性较高,可以手动控制偏移量和每页条数。

缺点:

可能出现数据重复或丢失的情况,因为为了判断是否有下一页,会查询额外的一条记录。
使用上需要手动处理分页逻辑,不像 PageHelper.startPage 那样直观和方便。

PageMethod.offsetPage是否有下一页的优化:

当使用 PageMethod.offsetPage 方法进行分页查询时,通常会额外获取比当前页码所需的数据多一条(pageSize + 1)。这是为了判断是否存在下一页数据,因为如果获取的结果等于 pageSize + 1,则说明还有下一页数据存在。在此过程中,需要进行判断并处理是否有下一页数据以及获取当前页的数据。

下面是一个示例,演示了使用 PageMethod.offsetPage 方法进行分页查询后,判断是否存在下一页数据并获取当前页数据的处理方式:

PageMethod.offsetPage((pageNum - 1) * pageSize, pageSize + 1, false);
// 执行查询操作
List<User> userList = userMapper.selectUsers();boolean hasNextPage = userList.size() > pageSize; // 判断是否有下一页数据List<User> currentPageData;
if (hasNextPage) {// 如果存在下一页数据,需要去掉多余的那条数据currentPageData = userList.subList(0, pageSize);
} else {currentPageData = userList;
}// 处理当前页数据
// ...// 返回结果或其他操作
// ...

在这个例子中,首先使用 PageMethod.offsetPage 方法进行分页查询,查询结果存储在 userList 中。接着,根据 userList 的大小与预期的 pageSize 进行比较,判断是否有下一页数据,并根据情况截取获取当前页的数据。

如果 userList 的大小大于 pageSize,说明存在下一页数据,因此需要将多出来的那条数据去掉(subList(0, pageSize)),得到当前页的数据。否则,userList 的大小等于或小于 pageSize,表示没有下一页数据,直接将 userList 作为当前页数据即可。

最后,对当前页数据进行处理,比如展示、返回给前端或进行其他操作。这种方式可以处理 PageMethod.offsetPage 方法获取的分页数据,确保获取当前页数据的正确性,并判断是否有下一页数据。

选择使用哪种方式,需要根据具体场景需求和性能要求来决定。PageHelper.startPage
对于普通分页查询和对总数有要求的场景比较适用,而 PageMethod.offsetPage 则适合于大数据量分页且不要求总数查询的情况。

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

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

相关文章

图像分割 分水岭法 watershed

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割 分水岭法 watershed&#xff08;C#&#xff09;-CSDN博客 Watershed算法是一种图像处理算…

Linux mcd命令教程:如何在MS-DOS文件系统中切换工作目录(附实例教程和注意事项)

Linux mcd命令介绍 mcd是mtools工具的指令&#xff0c;它用于在MS-DOS文件系统中切换工作目录。如果不加任何参数&#xff0c;它将显示当前所在的磁盘和工作目录。 Linux mcd命令适用的Linux版本 mcd命令在所有主流的Linux发行版中都可以使用&#xff0c;包括但不限于Ubuntu…

Flink 的时间属性及原理解析

Flink的API大体上可以划分为三个层次&#xff1a;处于最底层的ProcessFunction、中间一层的DataStream API和最上层的SQL/Table API&#xff0c;这三层中的每一层都非常依赖于时间属性。时间在Flink中的地位如下图所示&#xff1a; 时间属性是流处理中最重要的一个方面&#…

python flask图书管理系统带文档

python flask图书管理系统带文档。功能&#xff1a;登录&#xff0c;图书的增删改查&#xff0c;读者管理&#xff0c;借阅记录&#xff0c;有文档。 技术&#xff1a;python3,flask,mysql,html。 包含源码数据库文件文档。 源码下载地址&#xff1a; https://download.csd…

芯课堂 | MCU之TIMER精准延时

引言 华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别&#xff0c;为了让您更加简单的使用这一功能&#xff0c;下面小编将以SWM190为例&#xff0c;给大家展示如何使用SWM系列产品的TIMER功能。 TIMER精准延时 一、TIMER简介 TIMER是一种定时器工具&#xff0c;…

【测试小工具开发】

【测试小工具开发】 一、pyinstaller打包 1、打包单个文件 生成.exe文件&#xff1a; windows powershell中执行 pyinstaller -F -w clean_log.py -F&#xff1a; 只生成一个.exe文件 -w&#xff1a;执行时不弹窗 clean_log.py为待转为.exe的python文件 2、打包多个文件 通…

实例:NodeJS 操作 Kafka

本人是C#出身的程序员&#xff0c;c#很简单就能实现&#xff0c;有需要的可以加我私聊。但是就目前流行的开发语言&#xff0c;尤其是面向web方向应用的&#xff0c;我感觉就是Nodejs最简单了。下面介绍&#xff1a; 本文将会介绍在windows环境下启动Kafka&#xff0c;并通过n…

滑动窗口最大值(力扣239题)

单调递减队列&#xff1a; 在解决题目之前&#xff0c;我们先来了解一下单调递减队列&#xff0c;它其实就是在队列的基础上多加了一些限制&#xff0c;如下图&#xff1a; 要求队列中的元素必须按从大到小的顺序排列。 如果向单调递减队列中加入数字 1&#xff0c;可以直接加入…

一起玩儿物联网人工智能小车(ESP32)——25. 利用超声波传感器测量距离

摘要&#xff1a;本文介绍如何利用超声波传感器测量障碍物的距离 测量距离是智能小车经常要用到的功能&#xff0c;今天就来介绍一个最常用的测量距离的传感器——超声波传感器。 超声波传感器的测距原理是利用超声波发射器向某个方向发射超声波&#xff0c;与此同时&#xff…

【Emgu.CV教程】第22篇 、色彩处理之ApplyColorMap()伪色彩应用

这篇文章讲的内容比较轻松&#xff0c;技术含量比较低。从我个人的角度讲&#xff0c;ApplyColorMap()函数实现了类似PhotoShop的一些酷炫效果&#xff0c;既把原始彩色图转换为21种风格各异的彩色图像&#xff0c;比如秋天风格、热力图风格等等&#xff0c;但是&#xff0c;在…

【Java期末】学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源下载地址&#xff1a;https://download.csdn.net/download/weixin_47040861/88697244 —————…

Win11/10家庭版升专业版/企业版

2024.1.4 下载地址&#xff1a;HEU_KMS_Activator GitHubhttps://github.com/zbezj/HEU_KMS_Activator/tags 下载最新版即可 &#xff08;升级时需要断网&#xff09;打开程序 --> 其他 --> 选择professional --> 在点击四叶草图标即可 升级完后再次打开软件 -->…

Kali Linux实现UEFI和传统BIOS(Legacy)引导启动

默认Kali linux安装会根据当前启动的引导模式进行安装 例&#xff1a;以UEFI引导启动安装程序&#xff0c;安装后仅能在UEFI引导模式下进入系统 安装Kali系统 这边基于VirtualBox虚拟机镜像实战操作 首先创建一个Kali虚拟机 这里需要注意&#xff0c;把启动 EFI (只针对某些操…

Vue v-html中内容图片过大自适应处理

之前图片如下&#xff0c;图片已经超出了页面的展示范围 对v-html增加样式处理 <div class"body padding-l scroll " v-html"docData.content"> </div><style scoped>.body >>> img {max-width: 100% ;} </style>…

CCNP课程实验-04-BGP_CFG

目录 实验条件网络拓朴 基础配置需求实现IGP部分1. 按照图示配置OSPF区域&#xff0c;RID为Loopback 0地址。其中Area 146要配置为OSPF的特殊区域。2. 配置其它路由协议&#xff0c;重分布使得路由互相注入&#xff0c;实现全网互通。3. R1配置策略路由&#xff0c;使得R2经R1去…

Vue 框架前导:详解 Ajax

Ajax Ajax 是异步的 JavaScript 和 XML。简单来说就是使用 XMLHttpRequest 对象和服务器通信。可以使用 JSON、XML、HTML 和 text 文本格式来发送和接收数据。具有异步的特性&#xff0c;可在不刷新页面的情况下实现和服务器的通信&#xff0c;交换数据或者更新页面 01. 体验 A…

算法分析与设计 第六次理论作业

算法分析与设计 第六次理论作业 文章目录 算法分析与设计 第六次理论作业一. 单选题&#xff08;共4题&#xff0c;50分&#xff09;二. 填空题&#xff08;共3题&#xff0c;37.5分&#xff09;三. 简答题&#xff08;共1题&#xff0c;12.5分&#xff09; 一. 单选题&#xf…

Spring MVC之HandlerAdapter

1. 前言 Spring MVC没有限制Handler的类型&#xff0c;Handler可以以任何形式存在&#xff0c;内置的Handler就有四种类型&#xff1a; HandlerMethodControllerHttpRequestHandlerServlet 开发者还可以自定义Handler&#xff0c;面对各种各样类型的Handler&#xff0c;Spri…

18、BLIP

简介 github BLIP提出了一种基于预训练的方法&#xff0c;通过联合训练视觉和语言模型来提升多模态任务的性能。 BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架&#xff0c;是理解和生成的统一&#xff0c;引入了跨模态的编码器和解码…

Linux嵌入式配置/etc/profile文件

Linux嵌入式配置/etc/profile文件 void mountMouse() {QFile profile("/etc/profile");if (profile.exists()) {if (profile.open(QIODevice::ReadWrite)) {QByteArray fileData(profile.readAll());if (!fileData.contains("tslib:/dev/input/event0 intellim…