当前位置: 首页 > 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示例仓库

相关文章:

  • Linux下MySQL的安装与使用
  • Linux C/C++编程 —— 线程技术总结
  • NGINX如何处理静态文件?你会如何优化静态文件的传输?
  • 1538. 【中山市第十一届信息学邀请赛决赛】互质(different)
  • 从制造到智造:猎板PCB的技术实践与产业价值重构
  • 文章记单词 | 第115篇(六级)
  • 飞书知识问答深度体验:企业AI应用落地的典范产品
  • 数字信号处理大实验2 利用FFT估计信号的频率
  • Python训练营打卡Day34
  • 查看Linux进程中所有线程
  • PyQt学习系列07-数据库操作与ORM集成
  • 信号与系统03-信号的频域分析
  • 反本能---如何对抗你的习以为常
  • 哈希表的实现(上)
  • QString 写时拷贝简介
  • 探索常识性概念图谱:构建智能生活的知识桥梁
  • STM32 SPI通信(软件)
  • 【LINUX操作系统】线程池——线程部分综合运用并实现一个自己的线程池
  • [SWPUCTF 2021 新生赛]简简单单的解密
  • 疏锦行Python打卡 DAY 9 热力图和子图的绘制
  • 做计划网站/百度关键词排名代发
  • 有哪些网站是静态网站/郑州网络推广
  • 域名解析网站登录/福州专业的seo软件
  • 内蒙古网站建设/网络销售推广平台
  • 手机网站建设推广/青岛今天发生的重大新闻
  • 设计师一般放作品的网站/大数据培训机构排名前十