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

Java后端实现不用pagehelper。手写分页如何实现?

Java后端实现不用pagehelper。手写分页如何实现?

如果你不使用PageHelper这样的分页插件,你可以手动实现分页逻辑。下面是一个使用Java后端手写分页的示例:

首先,确定每页显示的数据量和当前页码。

int pageSize = 10; // 每页显示的数据量
int currentPage = 1; // 当前页码

确定查询总数据量的SQL语句。

String countSql = "SELECT COUNT(*) FROM your_table";

执行上述SQL语句,获取总数据量。

// 执行countSql语句,返回结果集ResultSet
// 假设使用JDBC连接数据库,可以使用Statement或者PreparedStatement执行查询操作
ResultSet countResult = statement.executeQuery(countSql);int totalCount = 0;
if (countResult.next()) {totalCount = countResult.getInt(1); // 获取第一列的数据作为总数据量
}
countResult.close();

根据总数据量和每页显示的数据量计算总页数。

int totalPages = (int) Math.ceil((double) totalCount / pageSize);

根据当前页码和每页显示的数据量计算偏移量

String pageSql = "SELECT * FROM your_table LIMIT ?, ?";

执行分页查询,获取当前页的数据。

// 执行pageSql语句,设置偏移量和每页数据量的参数
// 假设使用JDBC连接数据库,可以使用PreparedStatement执行查询操作
PreparedStatement pageStatement = connection.prepareStatement(pageSql);
pageStatement.setInt(1, offset);
pageStatement.setInt(2, pageSize);ResultSet pageResult = pageStatement.executeQuery();// 遍历结果集,获取分页数据
while (pageResult.next()) {// 处理每一行数据
}pageResult.close();
pageStatement.close();

通过以上步骤,你就可以手动实现分页功能了。需要注意的是,这只是一个简单的示例,实际应用中可能需要处理更多的异常情况和参数校验。同时,根据具体的数据库类型和框架,代码的具体实现方式可能会有所不同。

要是前端需要一个list。我如何使用Java分页后给他返回?

假设你已经完成了手动分页查询的代码,可以得到当前页的数据。

List<YourDataModel> dataList = new ArrayList<>();// 执行分页查询,获取当前页的数据
while (pageResult.next()) {YourDataModel data = new YourDataModel();// 假设YourDataModel是你的数据模型类,可以根据需要设置相应的属性值// 例如:data.setId(pageResult.getInt("id"));//       data.setName(pageResult.getString("name"));dataList.add(data);
}pageResult.close();
pageStatement.close();

将数据列表和分页信息封装成一个结果对象。

// 使用Jackson、Gson等库将结果对象转换成JSON字符串
String jsonResult = YourJsonConverter.convertToJson(result);

将JSON字符串作为响应返回给前端。

// 将JSON字符串作为响应返回给前端
response.getWriter().write(jsonResult);

上述示例中,我们使用了一个名为 PageResult 的类来封装分页结果,你可以根据自己需求自定义该类,并根据具体框架或库的要求进行JSON转换。

当前端接收到这个JSON字符串后,就可以解析其中的数据和分页信息,进行展示和处理了。

要是我查询没有做分页查询,如何将全部结果分页后返回?

完成查询操作,获取到所有的结果数据。

List<YourDataModel> dataList = new ArrayList<>();// 执行查询操作,获取所有的结果数据
while (resultSet.next()) {YourDataModel data = new YourDataModel();// 设置数据属性dataList.add(data);
}resultSet.close();
statement.close();

根据前端需要的分页信息(如每页显示的数据量和当前页码),进行分页处理。

int pageSize = 10; // 每页显示的数据量
int currentPage = 1; // 当前页码int totalCount = dataList.size(); // 总数据量
int totalPages = (int) Math.ceil((double) totalCount / pageSize); // 总页数int startIndex = (currentPage - 1) * pageSize; // 计算起始索引
int endIndex = currentPage * pageSize; // 计算结束索引if (endIndex > totalCount) {endIndex = totalCount; // 确保结束索引不超过总数据量
}List<YourDataModel> pageDataList = dataList.subList(startIndex, endIndex); // 获取当前页的数据

将分页数据和分页信息封装成一个结果对象。

// 创建一个结果对象,包含数据列表和分页信息
PageResult<YourDataModel> result = new PageResult<>();
result.setDataList(pageDataList); // 设置数据列表result.setCurrentPage(currentPage); // 设置当前页码
result.setPageSize(pageSize); // 设置每页显示的数据量
result.setTotalCount(totalCount); // 设置总数据量
result.setTotalPages(totalPages); // 设置总页数

使用合适的方式将结果对象转换为前端需要的格式,如JSON格式。

// 使用Jackson、Gson等库将结果对象转换成JSON字符串
String jsonResult = YourJsonConverter.convertToJson(result);

将JSON字符串作为响应返回给前端。

// 将JSON字符串作为响应返回给前端
response.getWriter().write(jsonResult);

请注意,上述示例中我们手动进行了分页处理,实际应用中可能需要根据具体需求进行异常处理、参数校验等。同时,根据具体的数据库类型和框架,代码的具体实现方式可能会有所不同。

相关文章:

Java后端实现不用pagehelper。手写分页如何实现?

Java后端实现不用pagehelper。手写分页如何实现? 如果你不使用PageHelper这样的分页插件&#xff0c;你可以手动实现分页逻辑。下面是一个使用Java后端手写分页的示例&#xff1a; 首先&#xff0c;确定每页显示的数据量和当前页码。 int pageSize 10; // 每页显示的数据量…...

spring 缓存

1.spring缓存注解&#xff0c;可以丢在controller&#xff0c;也可以丢在service&#xff0c;也可以丢在mapper。 2.手动操作缓存使用&#xff1a; Autowiredprivate CacheManager cacheManager;3.添加缓存 //添加缓存 Override Cacheable(cacheNames "test", key…...

vue3.0 element-plus 不同版本 el-popover 循环优化

表格内循环el-popover 渲染以后的页面&#xff0c;数据量很大的时候页面会卡&#xff0c;生成的代码&#xff1a; 解决思路&#xff1a;将el-popover提出来&#xff0c;不参与循环&#xff0c;让el-popover只渲染一次 1、以1.1.0-beta.24版为例&#xff08;低版本&#xff09;…...

计算机网络实验4:HTTP、DNS协议分析

文章目录 1. 主要教学内容2. HTTP协议3. HTTP分析实验【实验目的】【实验原理】【实验内容】【实验思考】 4. HTTP分析实验可能遇到的问题4.1 捕捉不到http报文4.2 百度是使用HTTPS协议进行传输4.3 Wireshark获得数据太多如何筛选4.4 http报文字段含义不清楚General&#xff08…...

敏捷项目管理如何做好Sprint Backlog?迭代管理

什么是Sprint Backlog&#xff1f; Sprint Backlog是Scrum的主要工件之一。在Scrum中&#xff0c;团队按照迭代的方式工作&#xff0c;每个迭代称为一个Sprint。在Sprint开始之前&#xff0c;PO会准备好产品Backlog&#xff0c;准备好的产品Backlog应该是经过梳理、估算和优先…...

实验三 图像分割与描述

一、实验目的&#xff1a; &#xff08;1&#xff09;进一步掌握图像处理工具Matlab&#xff0c;熟悉基于Matlab的图像处理函数。 &#xff08;2&#xff09;掌握图像分割方法&#xff0c;熟悉常用图像描述方法。 二、实验原理 1.肤色检测 肤色是人类皮肤重要特征之一&#xff…...

npm使用国内淘宝镜像的方法(两种)

一、通过命令配置 1、设置淘宝镜像源 npm config set registry https://registry.npm.taobao.org/ 2、设置官方镜像源 npm config set registry https://registry.npmjs.org 3、查看镜像使用状态&#xff1a; npm config get registry 如果返回https://registry.npm.taobao.org…...

05应用程序设计和文件操作

一、 给应用程序设置菜单栏 比如: 在qt中,如果想要使用菜单栏功能,那么界面的基类要选择QMainWindow,不能选择QWidget QDialog 实现菜单栏步骤如下: 第一步:在UI设计师,直接双击菜单栏 第二步:在UI设计师,修改文本内容和其他设置 进行设置 设置的效果图如下: …...

【果树农药喷洒机器人】Part8:果树对靶变量喷药实验

&#x1f4e2;&#xff1a;博客主页 【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d; 收藏 ⭐不迷路&#x1f649; &#x1f4e2;&#xff1a;内容若有错误&#xff0c;敬请留言 &#x1f4dd;指正…...

framework.beans.factory.annotation.Autowired(required=true)}

将其它项目复制过来&#xff0c;启动后会报错 15:24:55.880 [main] ERROR o.s.b.SpringApplication - [reportFailure,843] - Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name containerDataHandleC…...

【应用笔记】使用 CW32 实现电池备份(VBAT)功能

前言 电池备份&#xff08;VBAT&#xff09;功能的实现方法&#xff0c;一般是使用 MCU 自带的 VBAT 引脚&#xff0c;通过在该引脚连接钮扣电池&#xff0c;当系统电源因故掉电时&#xff0c;保持 MCU 内部备份寄存器内容和 RTC 时间信息不会丢失。 本文档介绍了如何基于 C…...

探讨uniapp的navigator 页面跳转问题

navigator 页面跳转。该组件类似HTML中的<a>组件&#xff0c;但只能跳转本地页面。目标页面必须在pages.json中注册。 "tabBar": {"color": "#7A7E83","selectedColor": "#3cc51f","borderStyle": "bl…...

使用Epoll实现高效的多路I/O转接

文章目录 概述1. 理解Epoll机制2. Epoll的三个主要函数3. 基于Epoll实现多路I/O转接4. 总结 概述 在网络编程中&#xff0c;高效地处理大量并发连接是提升系统性能的关键。传统的多线程或多进程模型在这种情况下可能会导致资源消耗过大&#xff0c;而Epoll&#xff08;事件驱动…...

流程挖掘in汽车丨宝马的流程效能提升实例

汽车行业在未来10年里&#xff0c;可能会面临比过去50年更多的变化。电动化、智能化、共享化和自动驾驶等方面的趋势可能给企业流程带来以下挑战&#xff1a; 供应链管理-电动化和智能化的发展可能导致供应链中的零部件和系统结构发生变化&#xff0c;企业需要重新评估和优化供…...

微信小程序实现当前页面更新上一个页面

日常项目中需要实现的一个价格脱敏功能&#xff1a;通过点击页面二中的查看完整信息 点击回退按钮实现页面一中的价格显露出来 通过查询了大量资料发现 大多数都是通过调用上一个接口的onload 或者onshow 实现视图更新 经测试后 发现 无法实现 只能更改数据 无法更新视图 实现…...

基于PSO-KELM的时间序列数据预测(含对比实验)

前段时间有粉丝私信想让我出一期对时间序列预测的文章&#xff0c;所以今天它来了。 时间序列数据&#xff0c;如股指价格&#xff0c;具有波动性、非线性和突变的特点&#xff0c;对于这类数据的预测往往需要可靠强健的预测模型&#xff0c;而传统的机器学习算法如SVM、BP等…...

线性代数(二) 矩阵及其运算

前言 行列式det(A) 其实表示的只是一个值 ∣ a b c d ∣ a d − b c \begin{vmatrix} a & b\\ c & d\end{vmatrix} ad -bc ​ac​bd​ ​ad−bc&#xff0c;其基本变化是基于这个值是不变。而矩阵表示的是一个数表。 定义 矩阵与线性变换的关系 即得 ( a 11 a 12…...

【图像分类】理论篇(4)图像增强opencv实现

随机旋转 随机旋转是一种图像增强技术&#xff0c;它通过将图像以随机角度进行旋转来增加数据的多样性&#xff0c;从而帮助改善模型的鲁棒性和泛化能力。这在训练深度学习模型时尤其有用&#xff0c;可以使模型更好地适应各种角度的输入。 原图像&#xff1a; 旋转后的图像&…...

Centos下的tcpdump抓包用法

先查一下是否安装, 无的话装一下 (版本低的用yum install) : rpm -qa tcpdump dnf install tcpdump 1. 列出能抓包的网卡: tcpdump -D | --list-interfaces 2. 在eth0网卡上抓来源为10.1.1.1 的包, 只抓一个包 (-n这里是不解析DNS) : tcpdump -i eth0 -n src 10.1.1.1 -…...

自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 使用SQLite存储的实体记忆 我们将创建一个简单的对话链&#xff0c;该链使用ConversationEntityMemory&#xff0c;并使用SqliteEntityStore作为后端存储。使用EntitySqliteStore作为记忆entity_store属性上的参数&am…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...