分页查询的实现

第一步:导入pom依赖

<!--配置PageHelper分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions></dependency>

第二步:mapper层方法

List<User> selectAllUser();

第三步:xml中写SQL

<!--查询用户列表--><select id="selectAllUser" resultType="com.example.deepseek.account.pojo.entity.User">SELECT *FROM usersORDER BY id DESC</select>

 注意:一定要加上排序,否则分页的时候数据可能会随机改变,例如:数据出现两页的情况,数据不能完全展示。

第四步:service层方法

PageInfo<UserDto> getUserList(Integer pageNum, Integer pageSize);

第五步:impl中的方法

@Overridepublic PageInfo<UserDto> getUserList(Integer pageNum, Integer pageSize) {//1.开启分页PageHelper.startPage(pageNum, pageSize);//2.查询用户列表List<User> users = userMapper.selectAllUser();//3. 获取原始分页信息PageInfo<User> userPageInfo = new PageInfo<>(users);//4.转化Entity为Dto列表List<UserDto> userDtos = users.stream().map(user -> new UserDto(user.getId(),user.getName(),user.getEmail(),user.getRole(),user.getPhone(),user.getAvatar(),user.getCreateTime(),user.getUpdateTime())).collect(Collectors.toList());// 5. 创建新PageInfo,复制分页原数据PageInfo<UserDto> dtoPageInfo = new PageInfo<>();dtoPageInfo.setPageNum(userPageInfo.getPageNum());dtoPageInfo.setPageSize(userPageInfo.getPageSize());dtoPageInfo.setTotal(userPageInfo.getTotal());dtoPageInfo.setPages(userPageInfo.getPages());dtoPageInfo.setList(userDtos);  // 设置转换后的数据return dtoPageInfo;}

 注意:如果系统中的pojo类是严格按照 Dto、Entity、VO 写的,这里将 Entity 转化为 Dto 的时候要先获取原始分页信息,然后转化对象,最后再创建新的 PageInfo ,保存分页的原始数据,防止后面分页的时候出现错误。如果没有先获取原始分页数据,而是直接使用 PageInfo.of 将转换后的List<UserDto> 返回,会导致分页的时候 PageInfo.of(userDtos) 检测到传入的是普通集合(非 Page 类型),​​强制重置分页信息​​(pageNum=1pageSize=集合大小

PageInfo 源码中,若传入的 List 不是 Page 类型,会默认:

this.pageNum = 1;  // 固定为第一页
this.pageSize = list.size();  // 每页大小=集合总长度
this.total = list.size();     // 总记录数=集合总长度

第六步:controller层方法

/*** 获取用户列表接口*/@RequestMapping("/getUserList")public JsonResult getUserList(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "5") Integer pageSize) {PageInfo<UserDto> pageInfo = userService.getUserList(pageNum, pageSize);return JsonResult.success(pageInfo);}

第七步:vue3前端写分页组件

1、和平常的列表查询一样,先写出用户列表。

<div>
<el-table-column prop="id" label="ID" width="80"/><el-table-column label="头像" width="100"><template #default="scope"><el-avatar :size="50" :src="getAvatarUrl(scope.row.avatar)"/></template></el-table-column><el-table-column prop="name" label="用户名"/><el-table-column prop="role" label="角色"/><el-table-column prop="email" label="邮箱"/><el-table-column prop="phone" label="联系方式"/><el-table-column prop="createTime" label="创建时间"/><el-table-column prop="updateTime" label="更新时间"/><el-table-column label="操作"><template #default="scope"><el-button size="small" @click="handleEdit(scope.row)">编辑</el-button><el-button size="small" type="danger" @click="handleDelete(scope.row)">删除<el-button></template></el-table-column></el-table>
</div>

2、然后添加分页查询组件

<div class="pagination-wrapper"><el-paginationbackground@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[5, 10, 20, 50]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total"/>
</div>

第八步:写前端方法

// 分页相关变量
const currentPage = ref(1)
const pageSize = ref(5)
const total = ref(0)// 获取用户列表数据
const fetchUserList = async () => {try {loading.value = trueawait request.get(`/api/user/getUserList`, {params: {pageNum: currentPage.value,pageSize: pageSize.value}}).then(response => {if (response.code === 200 || response.code === "200") {userList.value = response.data.list;total.value = response.data.total;} else {throw new Error(`返回数据格式错误: ${response.data?.message || '未知错误'}`)}})} catch (error) {console.error('获取用户数据失败:', error)ElMessage.error(`数据加载失败: ${error.message}`)} finally {loading.value = false}
}// 每页条数改变事件
const handleSizeChange = (newSize) => {pageSize.value = newSizecurrentPage.value = 1fetchUserList()
}// 当前页码改变事件
const handleCurrentChange = (newPage) => {currentPage.value = newPagefetchUserList()
}// 操作后数据刷新逻辑
const refreshAfterOperation = () => {if (userList.value.length === 0 && currentPage.value > 1) {currentPage.value -= 1}fetchUserList()
}

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

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

相关文章

JDK17 Http Request 异步处理 源码刨析

为什么可以异步&#xff1f; #调用起始源码 // 3. 发送异步请求并处理响应 CompletableFuture future client.sendAsync( request, HttpResponse.BodyHandlers.ofString() // 响应体转为字符串 ).thenApply(response -> { // 状态码检查&#xff08;非200系列抛出异常&…

会计 - 合并4 - 或有对价的会计处理

一、多次交易(构成一揽子交易)形成非同一控制下企业合并 构成一揽子交易的,在取得控制权时确认长期股权投资;取得控制权之前已支付的款项应作为预付投资款项(通常以”预付账款“科目核算)处理。 满足以下一种或多种情况的,通常应将多次交易事项作为“一揽子交易”进行会…

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…

NLP中的input_ids是什么?

在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…

⚡️ Linux Docker 基本命令参数详解

&#x1f433; Linux Docker 基本命令参数详解 &#x1f4d8; 1. Docker 简介 Docker 是一个开源的容器化平台&#xff0c;它通过将应用及其依赖打包到一个轻量级、可移植的容器中&#xff0c;从而实现跨平台运行。Docker 采用 C/S 架构&#xff0c;服务端称为 Docker Daemon&a…

Spring IoC 模块设计文档

注&#xff1a;码友们&#xff0c;我们是从设计的角度一步步学习和分解Spring&#xff1b;所以不要一上来就想看源码&#xff0c;也不需要关心Spring具体加载进去的&#xff1b;我们只封装工具&#xff08;如IoC&#xff09;&#xff0c;至于调用&#xff0c;暂时不用考虑&…

Linux(生产消费者模型/线程池)

目录 一 生产消费者模型 1. 概念&#xff1a; 2. 基于阻塞队列的生产消费者模型&#xff1a; 1. 对锁封装 2. 对条件变量封装 二 信号量(posix) 1. 概念 2. API 3. 基于环形队列的生产消费者模型 三 线程池 1. 概念 2. 示例 四 补充字段 1. 可重入函数 VS 线程安…

无线网络扫描与分析工具 LizardSystems Wi-Fi Scanner 25.05

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【百款黑科技】&#xff1a;https://uc…

Java Map完全指南:从基础到高级应用

文章目录 1. Map接口概述Map的基本特性 2. Map接口的核心方法基本操作方法批量操作方法 3. 主要实现类详解3.1 HashMap3.2 LinkedHashMap3.3 TreeMap3.4 ConcurrentHashMap 4. 高级特性和方法4.1 JDK 1.8新增方法4.2 Stream API结合使用 5. 性能比较和选择建议性能对比表选择建…

[最全总结]城市灾害应急管理系统

城市灾害应急管理集成系统 | 国家重点研发政府间合作项目 Vue+ElementUI+Bpmn+Cesium+Java SpringBoot 项目描述 在智慧城市战略背景下,项目面向内涝、团雾和火灾等灾害,开发了集灾害模型集成模拟、场景可视化与应急预案管理于一体的系统,系统各子模块进行软件功能测试,测…

QtWidgets模块功能及架构解析

QtWidgets 是 Qt 框架中用于创建传统桌面应用程序图形用户界面(GUI)的核心模块。在 Qt 6.0 中&#xff0c;QtWidgets 模块继续提供丰富的 UI 组件和功能&#xff0c;尽管 Qt 正在向 QML 方向演进&#xff0c;但 QtWidgets 仍然是许多桌面应用程序的基础。 一、主要功能 基础窗…

grep、wc 与管道符快速上手指南

&#x1f3af; Linux grep、wc 与管道符快速上手指南&#xff1a;从入门到实用 &#x1f4c5; 更新时间&#xff1a;2025年6月7日 &#x1f3f7;️ 标签&#xff1a;Linux | grep | wc | 管道符 | 命令行 文章目录 前言&#x1f31f; 一、grep、wc 和管道符简介1.核心功能2.核心…

C++11 右值引用:从入门到精通

文章目录 一、引言二、左值和右值&#xff08;一&#xff09;概念&#xff08;二&#xff09;区别和判断方法 三、左值引用和右值引用&#xff08;一&#xff09;左值引用&#xff08;二&#xff09;右值引用 四、移动语义&#xff08;一&#xff09;概念和必要性&#xff08;二…

java复习 04

心情复杂呢&#xff0c;现在是6.7高考第一天&#xff0c;那年今日此时此刻我还在考场挣扎数学&#xff0c;虽然结果的确很糟糕&#xff0c;&#xff0c;现在我有点对自己生气明明很多事情待办确无所事事没有目标&#xff0c;不要忘记曾经的自己是什么样子的&#xff0c;去年今日…

从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)

概述 在软件开发中&#xff0c;自动化测试是确保代码质量的重要方式。而 Pytest 是一个功能强大且易于上手的 Python 测试框架&#xff0c;非常适合初学者入门。 本文将带你一步步完成&#xff1a; 安装和配置 Pytest在 PyCharm 中搭建一个清晰的测试项目结构 准备工作 在…

用电脑通过网口控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点: 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比,使用 14 位模数转换器 (ADC) 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS 本底噪声的较小信号。使用独有区域触摸在几秒…

Java Smart 系统题库试卷管理模块设计:从需求到开发的实战指南

在教育信息化不断推进的背景下&#xff0c;高效的题库及试卷管理系统至关重要。Java Smart 系统中的题库及试卷管理模块&#xff0c;旨在为教师提供便捷的试题录入、试卷生成与管理功能&#xff0c;同时方便学生在线练习与考试。本文将详细介绍该模块的设计思路与核心代码实现。…

PDF图片和表格等信息提取开源项目

文章目录 综合性工具专门的表格提取工具经典工具 综合性工具 PDF-Extract-Kit - opendatalab开发的综合工具包&#xff0c;包含布局检测、公式检测、公式识别和OCR功能 仓库&#xff1a;opendatalab/PDF-Extract-Kit特点&#xff1a;功能全面&#xff0c;包含表格内容提取的S…

git小乌龟不显示图标状态解决方案

第一步 在开始菜单的搜索处&#xff0c;输入regedit命令&#xff0c;打开注册表。 第二步 在注册表编辑器中&#xff0c;找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 这一项。 第三步 让Tortoise相关的项目排在前…

Windows平台RTSP/RTMP播放器C#接入详解

大牛直播SDK在Windows平台下的RTSP、RTMP播放器模块&#xff0c;基于自研高性能内核&#xff0c;具备极高的稳定性与行业领先的超低延迟表现。相比传统基于FFmpeg或VLC的播放器实现&#xff0c;SmartPlayer不仅支持RTSP TCP/UDP自动切换、401鉴权、断网重连等网络复杂场景自适应…