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

多语种多场景的的分页详解

markdown

前后端分页实现全面指南

本指南详细讲解Java后端与Vue前端的分页实现方案,涵盖框架集成和原生实现两种方式。


一、后端Java分页实现

1. 使用MyBatis + PageHelper插件


**依赖配置**:
```xml
<!-- pom.xml -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version>
</dependency>
代码实现:java
// Controller层
@GetMapping("/users")
public PageInfo<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {return userService.getUsers(pageNum, pageSize);
}// Service层
public PageInfo<User> getUsers(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);  // 自动拦截SQLList<User> users = userMapper.selectAll();return new PageInfo<>(users);  // 包含分页元数据
}// Mapper XML(无需分页SQL)
<select id="selectAll" resultType="User">SELECT * FROM users  <!-- 原始SQL -->
</select>
  1. 原生JDBC分页实现.
核心逻辑:

java
public PageResult manualPagination(int pageNum, int pageSize) throws SQLException {
int offset = (pageNum - 1) * pageSize;
String dataSql = “SELECT * FROM users LIMIT ? OFFSET ?”;
String countSql = “SELECT COUNT(*) FROM users”;

try (Connection conn = dataSource.getConnection();PreparedStatement dataStmt = conn.prepareStatement(dataSql);PreparedStatement countStmt = conn.prepareStatement(countSql)) {// 分页数据查询dataStmt.setInt(1, pageSize);dataStmt.setInt(2, offset);ResultSet rs = dataStmt.executeQuery();List<User> users = new ArrayList<>();while (rs.next()) {users.add(new User(rs.getInt("id"), rs.getString("name")));}// 总数查询ResultSet countRs = countStmt.executeQuery();int total = countRs.next() ? countRs.getInt(1) : 0;return new PageResult<>(users, total);
}

}


二、前端Vue分页实现1. 使用Element UI组件安装组件:bash

npm install element-ui

模板与逻辑:vue
<el-pagination:current-page="currentPage":page-sizes="[5, 10, 20]":page-size="pageSize":total="total"layout="total, sizes, prev, pager, next"@size-change="handleSizeChange"@current-change="handlePageChange"
/>
2. 自定义分页组件

组件实现:

vue

三、数据库分页SQL
数据库	SQL语句示例
MySQL	

SELECT * FROM users ORDER BY id LIMIT #{pageSize} OFFSET #{offset}


Oracle	

SELECT * FROM (SELECT t.*, ROWNUM rn FROM users t WHERE ROWNUM <= #{end}) WHERE rn >= #{start}


SQL Server	

SELECT * FROM users ORDER BY id OFFSET #{offset} ROWS FETCH NEXT #{pageSize} ROWS ONLY


四、核心公式与协议分页计算公式javascript

offset = (currentPage - 1) * pageSize
totalPages = Math.ceil(totalItems / pageSize)


接口协议规范请求参数:

json
{
“pageNum”: 1, // 当前页码
“pageSize”: 10 // 每页数据量
}

响应格式:json

{
“list”: [], // 当前页数据
“total”: 100 // 总数据量
}

五、性能优化建议
索引优化排序字段必须建立索引(如ORDER BY create_time DESC)组合查询时使用复合索引深度分页处理sql

– MySQL优化方案
SELECT * FROM users
WHERE id > #{lastId} – 使用游标分页
ORDER BY id
LIMIT #{pageSize}

缓存策略热点数据使用Redis缓存分页结果使用Elasticsearch进行复杂分页查询六、方案选型指南
场景	推荐方案
快速开发常规项目	PageHelper + Element UI
高并发海量数据	游标分页 + 前端无限滚动
需要深度定制分页逻辑	原生JDBC + 自定义Vue组件
复杂多条件查询	Elasticsearch分页
完整示例代码参考:GitHub示例仓库
http://www.xdnf.cn/news/616033.html

相关文章:

  • 哪家的电能质量分析仪最好?
  • 解锁C++递归算法:从原理到实战
  • RAG 和 Fine-Tuning
  • 保持元素的宽高比
  • 【复杂网络分析】社区发现(Community Detection)算法简介
  • Spring Bean的作用域
  • SpringBoot3引入knife4j和knife4j文档请求异常
  • 生产者和消费者问题
  • C++可变参数宏定义语法笔记
  • 【数据架构01】数据技术架构篇
  • Dify聊天系统SSE响应和聊天树数据结构图解
  • Spring的组成部分
  • Linux 的OTA升级学习1:Linux OTA升级方案_SWupdate
  • 聚焦 Microsoft Fabric,释放数据潜力
  • 篇一:重新学习的碎碎记
  • 【Web前端】JavaScript入门与基础(二)
  • 【AS32X601驱动系列教程】USART_串口通讯详解
  • 传统工程项目管理与业财一体化管理的区别?
  • 【知识点】关于vue3中markRow、shallowRef、shallowReactive的了解
  • [20250522]目前市场上主流AI开发板及算法盒子的芯片配置、架构及支持的AI推理框架的详细梳理
  • 深入解析 Linux 进程管理
  • 智能建筑时代来临,楼宇自控技术成智能建筑标配新趋势
  • redis主从复制架构安装与部署
  • 【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结
  • 【通用智能体】Intelligent Internet Agent (II-Agent):面向复杂网络任务的智能体系统深度解析
  • 1.1 自动控制的一般概念
  • 【自定义类型-联合和枚举】--联合体类型,联合体大小的计算,枚举类型,枚举类型的使用
  • 电脑 IP 地址修改工具,轻松实现异地登陆
  • 如何实现 ERP 系统与淘宝订单、商品、物流接口对接
  • 大厂技术大神远程 3 年,凌晨 1 点到 6 点竟开会 77 次。同事一脸震惊,网友:身体还扛得住吗?