Springboot整合vue实现分页
SpringBoot 整合 Vue 实现分页
后端实现(SpringBoot)
-
创建分页接口
使用 Spring Data JPA 或 MyBatis 实现分页查询,返回分页数据对象(如Page或自定义分页结果)。@GetMapping("/api/data") public ResponseEntity<Page<Data>> getPaginatedData( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable pageable = PageRequest.of(page, size); Page<Data> dataPage = dataRepository.findAll(pageable); return ResponseEntity.ok(dataPage); } -
分页返回结构
若需自定义分页响应,可封装如下对象:public class PageResult<T> { private List<T> content; private int totalPages; private long totalElements; // Getters and Setters }
前端实现(Vue)
-
安装依赖
使用axios发送请求,并安装分页组件(如element-ui或自定义组件)。npm install axios element-ui -
分页请求与数据绑定
在 Vue 组件中调用分页接口并绑定数据:
<template> <el-table :data="tableData"> <!-- 表格列定义 --> </el-table> <el-pagination @current-change="handlePageChange" :total="total" :page-size="pageSize" layout="prev, pager, next"> </el-pagination> </template> <script> export default { data() { return { tableData: [], total: 0, pageSize: 10, currentPage: 1 }; }, methods: { fetchData(page = 0) { axios.get(`/api/data?page=${page}&size=${this.pageSize}`) .then(response => { this.tableData = response.data.content; this.total = response.data.totalElements; }); }, handlePageChange(page) { this.currentPage = page; this.fetchData(page - 1); } }, created() { this.fetchData(); } }; </script>
关键点说明
-
后端分页参数
page从 0 开始,size指定每页条数。前端传递时需注意页码转换(如page - 1)。 -
前端分页组件
el-pagination的current-change事件触发时,更新当前页并重新请求数据。 -
跨域问题
若前后端分离,需在 SpringBoot 中配置 CORS:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/").allowedOrigins("*"); } }
优化建议
-
分页缓存
后端可对高频查询数据启用缓存(如 Redis),减少数据库压力。 -
前端加载状态
添加加载动画或骨架屏,提升用户体验:<el-table v-loading="isLoading"> -
错误处理
捕获分页请求异常并提示用户:axios.get(...).catch(error => { this.$message.error('加载失败'); });






