当前位置: 首页 > 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);

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

http://www.lryc.cn/news/125486.html

相关文章:

  • spring 缓存
  • vue3.0 element-plus 不同版本 el-popover 循环优化
  • 计算机网络实验4:HTTP、DNS协议分析
  • 敏捷项目管理如何做好Sprint Backlog?迭代管理
  • 实验三 图像分割与描述
  • npm使用国内淘宝镜像的方法(两种)
  • 05应用程序设计和文件操作
  • 【果树农药喷洒机器人】Part8:果树对靶变量喷药实验
  • framework.beans.factory.annotation.Autowired(required=true)}
  • 【应用笔记】使用 CW32 实现电池备份(VBAT)功能
  • 探讨uniapp的navigator 页面跳转问题
  • 使用Epoll实现高效的多路I/O转接
  • 流程挖掘in汽车丨宝马的流程效能提升实例
  • 微信小程序实现当前页面更新上一个页面
  • 基于PSO-KELM的时间序列数据预测(含对比实验)
  • 线性代数(二) 矩阵及其运算
  • 【图像分类】理论篇(4)图像增强opencv实现
  • Centos下的tcpdump抓包用法
  • 自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的存储与应用]
  • 微服务与Nacos概述-5
  • 第九章 动态规划part08(代码随想录)
  • 智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装
  • kubernetes的存储卷使用
  • centos 之安装 openssl 1.1.1报错
  • matlab使用教程(16)—图论中图的定义与修改
  • 【C++面向对象】--- 继承 的奥秘(下篇)
  • Android 面试笔记整理-Binder机制
  • 编程小白的自学笔记十三(python办公自动化读写文件)
  • 【Mariadb高可用MHA】
  • 网络五层协议