Mybatis实现分页查询数据(代码实操讲解)
在MyBatis中实现分页查询的常见方式有两种:使用MyBatis内置的分页插件如PageHelper,或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。
使用PageHelper分页插件
首先,确保你的项目中已经添加了PageHelper的依赖。在Maven项目中,可以在pom.xml文件中添加如下依赖(版本号可能需要更新):
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>最新版本</version>
</dependency>
然后,在你的Service或Mapper层调用PageHelper的静态方法startPage来启动分页功能,之后紧跟着的查询就是一个分页查询了。
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import java.util.List;public PageInfo<User> findByPage(int pageNum, int pageSize) {// pageNum: 页码, pageSize: 每页显示数量PageHelper.startPage(pageNum, pageSize);// 紧跟着的第一个select方法会被分页List<User> users = userMapper.selectAll();// 使用PageInfo包装查询结果,便于使用return new PageInfo<>(users);
}
手动编写分页SQL
如果你不想使用分页插件,也可以手动编写SQL实现分页。以下是一个基于MySQL数据库的分页查询示例:
<!-- MyBatis的Mapper文件 -->
<select id="findByPage" resultType="User">SELECT * FROM usersORDER BY idLIMIT #{offset}, #{pageSize}
</select>
确实,如果你直接使用手动编写的分页SQL查询,这种方式并不会自动返回查询结果的总数(total)。要获取总数,通常需要执行一个额外的SQL查询来计算总记录数。这意味着对于分页功能,你通常需要执行两个查询:一个是分页查询本身,另一个是为了获取总记录数的查询。
以下是如何实现这一点的示例:
1. 查询总记录数(注意这里需要查询你需要数据库中全部信息返给前端作为total值)
首先,你需要一个SQL查询来获取总记录数。这通常是一个简单的SELECT COUNT语句。
<!-- 在MyBatis的Mapper文件中 -->
<select id="findTotalCount" resultType="int">SELECT COUNT(*) FROM users
</select>
2. 修改Service或DAO层
然后,在你的Service或DAO层,你可以首先查询总记录数,然后执行分页查询。这样,你可以将总记录数和分页查询的结果一起返回给调用者。
import java.util.HashMap;
import java.util.List;
import java.util.Map;public Map<String, Object> findByPage(int pageNum, int pageSize) {int offset = (pageNum - 1) * pageSize;int total = userMapper.findTotalCount(); // 获取总记录数List<User> users = userMapper.findByPage(offset, pageSize); // 分页查询Map<String, Object> result = new HashMap<>();result.put("total", total); // 总记录数result.put("users", users); // 分页查询结果return result;
}
这样,你就可以在前端或调用者那里得到总记录数和当前页的记录列表,从而可以计算出总页数、当前页码等分页信息,为用户提供完整的分页功能。
记得,每次分页查询都执行两次数据库操作(一次获取总数,一次实际分页查询)可能会对性能有一定影响,特别是在处理大量数据时。因此,对于数据量非常大的情况,需要考虑缓存策略或其他优化手段。在这里,#{offset}是查询的起始位置(例如,在第2页,每页10条记录,offset应该是10),#{pageSize}是每页显示的记录数。


相关文章:
Mybatis实现分页查询数据(代码实操讲解)
在MyBatis中实现分页查询的常见方式有两种:使用MyBatis内置的分页插件如PageHelper,或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。 使用PageHelper分页插件 首先,确保你的项目中已经添加了PageHelper的依赖。在Maven项…...
【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记
《自动驾驶技术概论》学习笔记 致谢:作者:王建、徐国艳、陈竞凯、冯宗宝 -------------------------------------------------------------------------------------------------------- 笔记目录 《自动驾驶技术概论》学习笔记 1.汽车发展史 2.国…...
2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建(运维配置)
1.完成整网连通后,进入网络监控运维阶段,运维软件已安装在PC的虚拟机中,通过运维平台监控拓扑中所有网络设备(AP除外)。考试现场提供运维平台登陆的用户名密码信息。 2.通过运维平台将被监控设备纳入监控范围;通过拓扑配置功能,将网络拓扑配置到平台中。...
Linux设备模型(八) - sysfs
一,sysfs目录介绍 sysfs是一个基于内存的虚拟的文件系统,有kernel提供,挂载到/sys目录下,负责以设备树的形式向user space提供直观的设备和驱动信息。 sysfs以不同的视角展示当前系统接入的设备: /sys/block 历史遗…...
C语言实现Linux下的UDP服务端和客户端
程序实现了UDP服务端和客户端,客户端发送消息后等待服务端响应。 udp_server.c: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> …...
Excel小技巧 (2) - 如何去除和增加前导0
1. 如何去除前导0 公式:SUBSTITUTE(A2,0,""),然后拖动十字架,同步所有列数据,轻松搞定。 2. 如何补充前导0 公式:TEXT(D2,"0000000") ,0的个数是数字的完整位数。然后拖动十字架&a…...
【GIS人必看】ArcPy脚本如何导入到ArcToolBox中(上)【建议收藏】
经常使用ArcGIS的朋友应该知道,ArcGIS平台可以支持非常丰富的全栈链二次开发,比如ArcPy脚本开发、ArcGIS Engine桌面端开发、ArcGIS AddIn插件开发、WebGIS开发、移动端GIS开发等。当然,这些技术本人全部精通,后面会给大家陆续介绍…...
AI入门笔记(三)
神经网络是如何工作的 神经网络又是如何工作的呢?我们用一个例子来解释。我们看下面这张图片,我们要识别出这些图片都是0并不难,要怎么交给计算机,让计算机和我们得出同样的结果?难点就在于模式识别的答案不标准&…...
Linux搭建SFTP服务器
案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…...
MobaXterm无法上传整个文件夹,只能上传的单个文件
问题描述: 本来想使用MobaXterm上传.vscode文件夹上传到服务器,但是选择文件夹打开后只能选择文件夹下面的子文件无法上传整个文件。 解决方案: 1、简单暴力 2、压缩后解压...
Android 中get请求网络数据 详细举例
请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…...
每日五道java面试题之mysql数据库篇(六)
目录: 第一题. MySQL中InnoDB引擎的行锁是怎么实现的?第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁?怎么解决?第四题. 数据库的乐观锁和悲观锁是什么?怎么实现的?第五题. 为什么要使用视图&a…...
Latex——多张图排列
一、方式一(subfig 与 subfloat 配合使用) % Need:\usepackage{subfig} \begin{figure}[htbp] % \setlength{\abovecaptionskip}{0.2cm} % \setlength{\belowcaptionskip}{-0.5cm} \centering\subfloat[MOT15]{\label{fig:a}\includegrap…...
前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
问题: 前两天一同事请教我:前端复选框问题-节点赋值未选中最后显示时确变成选中状态? 还有就是明明传过为的是false,在控制台上打印确变成选中状态,如下图: 以下是前端vue代码: <Scroll h…...
JavaScript命名标识符规范,前端开发面试
前端的现状 提到现状,必须先提到一个概念 大前端。由于近几年互联网的发展,尤其是移动互联网的发展,有的大前端概念将 Native 归入前端的范畴,有的大前端概念将 Node 甚至只渲染页面的 PHP 归入前端范畴,但不管怎么说…...
从零学习Linux操作系统 第三十部分 部署Anisble
一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…...
C++对象模型剖析(六)一一Data语义学(三)
Data 语义学(三) “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承(virtual inheritance)没有讲,现在我们就来看看吧。 虚拟继承(Virtual Inheritance) 虚拟继承本质就是…...
Java 代理模式详解(附案例源代码)
前言 Java代理模式是一种设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…...
七牛云 上传 文件 file is empty
问题 七牛云 上传 文件 file is empty 详细问题 笔者进行Android 开发,使用URI上传文件,上传核心代码 具体报错信息 {ver:8.7.0,ResponseInfo:1709276329412131,status:-6, reqId:, xlog:null, xvia:null, host:null, time:1709276329,error:file is…...
【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024
AI视野今日CS.Sound 声学论文速览 Tue, 5 Mar 2024 Totally 18 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers SA-SOT: Speaker-Aware Serialized Output Training for Multi-Talker ASR Authors Zhiyun Fan, Linhao Dong, Jun Zhang, Lu Lu, Zejun M…...
别再傻傻分不清!用打电话、对讲机、广播这些生活例子,5分钟搞懂串行通信里的单工、半双工和全双工
从生活场景秒懂通信模式:广播、对讲机与电话的硬核技术解读 刚接触嵌入式开发时,看到UART、I2C这些协议文档里蹦出的"全双工"、"半双工"术语,是不是感觉像在读天书?别急着翻教科书,其实这些抽象概…...
金融机构 一般采用是机械硬盘还是固态硬盘
金融机构现在普遍采用的是以固态硬盘(SSD)为主、机械硬盘(HDD)为辅的混合架构。可以说,一个全面向全闪存(全SSD) 演进的趋势正在所有主流银行和券商中发生。可以看一个非常直观的例子࿱…...
测试工程师的沟通技巧:如何向开发工程师反馈bug
在软件研发的协作链条中,测试工程师与开发工程师的互动至关重要,而反馈bug则是两者沟通的核心场景之一。高效、专业的bug反馈,不仅能加速问题解决,提升产品质量,更能维护良好的团队协作氛围。对于软件测试从业者而言&a…...
Linux信号机制深度解析:从内核实现到多线程编程实践
1. 信号的角色与核心概念 信号,这个在Unix/Linux世界里存在了超过三十年的机制,至今仍然是进程间通信和内核与进程交互的基石。简单来说,信号就是内核发给进程的一个简短通知,告诉它“有事情发生了”。你可以把它想象成你手机上的…...
Flutter代码混淆实战指南:原理、配置与常见问题解决方案
1. 项目概述:为什么Flutter代码混淆是开发者的必修课?在Flutter应用开发中,我们常常将精力倾注于UI的丝滑流畅、功能的丰富强大,却容易忽视一个至关重要的环节——代码安全。当你的应用发布到各大应用商店,那些辛苦编写…...
Langchain自定义LLM实战:我把一个简单的Python函数变成了AI模型接口
LangChain自定义LLM实战:从Python函数到智能接口的魔法变形记 在AI应用开发的世界里,大型语言模型(LLM)正以前所未有的速度改变着技术格局。但你是否想过,那些看似神秘的AI接口背后,其实隐藏着一个惊人的简单本质?今天…...
从卡尔曼滤波到Mamba:状态空间模型(SSM)的‘前世今生’与技术演进图谱
从卡尔曼滤波到Mamba:状态空间模型的技术演进与未来展望 状态空间模型(State Space Models, SSM)这一概念最早可追溯至20世纪60年代的控制理论领域,如今却在深度学习时代焕发出全新的生命力。当我们谈论Mamba、S4这些突然走红的新…...
RT-Thread软定时器漂移问题深度解析与实战优化
1. 项目概述:从一次线上告警说起那天下午,系统监控平台突然弹出一连串的告警,核心业务模块的周期性任务执行间隔出现了肉眼可见的抖动,从预期的100毫秒,漂移到了130毫秒甚至更长。排查了一圈硬件、中断和任务调度&…...
科研学术篇---文献引用格式
面对五花八门的引用格式,你只需要记住一个核心:不同的学科,就像不同的“方言区”,各自有一套约定俗成的引用“语法”。学会识别和使用它们,是学术写作的基本功。下面通俗地介绍最常见的几种格式,帮你一眼看…...
【会议征稿通知 | E3S出版 | EI 、Scopus稳定检索】第十二届能源材料与环境工程国际学术会议(ICEMEE 2026)
第十二届能源材料与环境工程国际学术会议(ICEMEE 2026) 2026 12th International Conference on Energy Materials and Environment Engineering 2026年6月12-14日 | 线上会议 大会官网:www.icemee.net 截稿时间:见官网&#x…...
