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);

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

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

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

相关文章

移动通信系统的LMS自适应波束成形技术matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... idxx0; while idxx&…

Spring Bean的生命周期总结(包含面试题)

目录 一、Bean的初始化过程 1. 加载Spring Bean 2. 解析Bean的定义 3. Bean属性定义 4. BeanFactoryPostProcessor 扩展接口 5. 实例化Bean对象 6. Aware感知 7. 初始化方法 8. 后置处理 9. destroy 销毁 二、Bean的单例与多例模式 2.1 单例模式&#xff08;Sin…

游戏不再只是娱乐,更成为了一种学习和成长的途径

随着科技的飞速发展和游戏设计的创新&#xff0c;当下的游戏行业正经历着前所未有的繁荣时代。各种各样的游戏类型在不断涌现&#xff0c;为玩家们带来了丰富多彩的娱乐体验。这些火热的游戏类型不仅改变了我们的娱乐方式&#xff0c;还在无形中影响了我们的生活。 多元游戏类…

2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…

大数据平台中元数据库—MySQL的异常故障解决

本文的主要目标是解决大数据平台中元数据库MySQL的异常故障。通过分析应用响应缓慢的问题&#xff0c;找到了集群组件HIVE和元数据库MySQL的原因。通过日志分析、工具检测和专家指导等一系列方法&#xff0c; 最终确定问题的根源是大数据集群中租户的不规范使用所导致&#xff…

[Unity]Lua本地时间、倒计时和正计时。

惯例&#xff0c;直接上代码&#xff1a; --正计时开始时的时间戳 self.begin_time os.time() --倒计时时长&#xff0c;01:30:00 self.countdown_time 5400 --是否开始计时 self.is_update_local_time true--Unity Update function time_transition:update_local_timer()i…

Linux学习之iptables过滤规则的使用

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT会在最后一行插入。 10…

代码随想录day52

300最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {int piles 0; // 牌堆数初始化为 0vector<int> top(nums.size()); // 牌堆数组 topfor (int i 0; i < nums.size(); i) {int poker nums[i]; int left 0, right…

04 qt功能类、对话框类和文件操作

一 QT中时间和日期 时间 ---- QTime日期 ---- QDate对于Qt而言,在实际的开发过程中, 1)开发者可能知道所要使用的类 ---- >帮助手册 —>索引 -->直接输入类名进行查找 2)开发者可能不知道所要使用的类,只知道开发需求文档 ----> 帮助 手册,按下图操作: 1 …

Android 13像Settings一样获取SIM卡信息

一.背景 由于客户定制的Settings里面需要获取到SIM卡信息,所以需要实现此功能。 目录 一.背景 二.前提条件 三.调用api 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_…

python中的cnn:介绍和基本使用方法

python中的cnn&#xff1a;介绍和基本使用方法 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种在图像识别、语音识别、自然语言处理等许多领域取得显著成功的深度学习模型。CNN的设计灵感来源于生物的视觉系统&#xff0c;由多…

WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)

我在实际解决问题时用到了 【简单暴力解决方案】的《方法一&#xff1a;修改wp-config.php》 和 【简单暴力-且特别粗暴-的解决方案】 更换域名时经常遇到的几个问题&#xff1a; 1、更换域名后&#xff0c;后台无法进入 2、更换域名后&#xff0c;网站模版错乱&#xff0c;c…

网络通信原理网络层TCP/IP协议(第四十三课)

1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网关的地址,网络的出口 3.IP地址 …

软件第三方测评机构做安全测试有用吗?

术语第三方测试/外包软件测试本身是不言自明的&#xff0c;即由任何个人/独立组织对软件进行测试 不直接或间接参与特定软件的开发。 在做出选择的决定时&#xff0c;可能会想到很多问题 内部测试团队或进行离岸第三方测试&#xff0c;首先是“我们为什么要外包软件测试&#…

C++设计模式结构型之代理模式

一、概述 代理模式是一种结构型模式&#xff0c;在很多不同的场合具有广泛的分类和应用。其主要实现的思想是在客户端和真正要访问的对象之间引入一个 代理对象&#xff08;间接层&#xff09;&#xff0c;于是&#xff0c;以往客户端对真正对象的访问现在变成了通过代理对…

数学建模-规划工具箱yalmip

官网下载 实例 %% yalmip 求解 yalmip clc;clear;close all; %% %sdpvar实型变量 intvar 整形变量 binvar 0-1型变量 psdpvar(3,1); %定义变量 %目标函数 要把求最大值转化为最小值 Objective-p(1)^2p(2)^2-p(2)*p(3);%约束条件 Constraints[0<p<1,(p(1)^2p…

音视频FAQ(一):视频直播卡顿

一、摘要 本文介绍了视频直播卡顿的四个主要原因&#xff0c;用户网络问题、用户设备性能问题、技术路线的选择和实现问题。因本文主要阐述视频直播的卡顿&#xff0c;故技术路线的实现指的是&#xff1a;CDN供应商的实现问题&#xff0c;包含CDN性能不足、CDN地区覆盖不足。对…

Vc - Qt - 绘制窗口背景色

要在Qt中绘制一个背景颜色&#xff0c;你可以使用Qt的绘图功能来完成。下面是一种简单的方法&#xff1a; 步骤1&#xff1a;在你想要绘制背景颜色的QWidget&#xff08;例如QMainWindow或QDialog&#xff09;的派生类中&#xff0c;重写 它的paintEvent函数。步骤2&#xff1a…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的&#xff0c;千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用&#xff0c;也未验证正确性&#xff0c;实不应该。

uni-app中使用pinia

目录 Pinia 是什么&#xff1f; uni-app 使用Pinia main.js 中引用pinia 创建和注册模块 定义pinia方式 选项options方式 定义pinia 页面中使用 pinia选项options方式 函数方式 定义pinia 页面中使用 函数方式 定义的pinia Pinia 是什么&#xff1f; Pinia&#xff0…