学校学生管理系统是 Java Web 学习中非常有代表性的全栈项目:后端负责新增、查询、修改、删除学生资料,前端负责提供表格、表单、搜索和分页,数据库负责把这些数据稳定地保存下来。使用 Java 17 + SpringBoot3 + Vue3 + MySQL 这套技术组合时,真正值得掌握的不是“把功能跑通”,而是理解 REST API 如何与页面交互、ORM 如何与表结构配合、联调失败时从哪一层开始定位问题。下面按照一条完整主线来做:先确定功能范围和技术栈,再准备环境与数据库,接着完成后端接口和前端页面,最后做联调验证、常见问题排查和生产化改进。完成之后,这个项目可以直接作为课程设计、毕业设计演示或后续学习权限、导入导出、部署等方向的底座。
1. 先拆解学生管理系统的功能边界,再决定怎么搭
1.1 最小可用系统只需要一条主业务线
学生管理系统如果做得太重,会变成“看起来什么都有,但没有一个模块讲清楚”。对新手项目来说,核心业务线很简单:管理员需要维护学生的基础档案。
最小功能集合可以收敛为以下几点:
- 学生列表分页展示,支持按姓名、学号关键词模糊搜索。
- 可按照班级、性别、在读状态等条件筛选。
- 新增学生,学号必须唯一,姓名、学号必填。
- 编辑学生资料,修改后立即生效。
- 删除学生记录。
- 维护班级字典数据,新增或编辑学生时,从班级列表中选择。
在演示版本里,可以暂时不做登录、权限、课程成绩、宿舍分配等扩展功能。把这些边界先划清楚,数据库设计、接口设计和页面设计都会简单很多。后面需要扩展时,再往这条主线上附加新表和新接口即可。
1.2 为什么选 Java 17 + Spring Boot 3 + Vue 3 + MySQL
这套组合并不是唯一选择,但它很适合作为当前阶段的学习主线,原因有三点。
第一,Spring Boot 3 已经全面切换到 Java 17+ 和jakarta.*命名空间。Spring Framework 6 和 Spring Boot 3 不再支持 Java 8,这意味着如果继续使用旧版 JDK,项目连编译都过不了。反过来想,使用 Spring Boot 3 的同时也必须把 Java 版本升级到 17,这正好帮助开发者完成从老 Spring 项目向新版本迁移的知识更新。
第二,Spring Boot 的 starter 机制把 Web、数据访问、参数校验等依赖组织得很干净。学生管理这类单表 CRUD 项目,最消耗时间的是页面布局和接口调试,后端如果能把“写一次实体、自动获得分页查询”的能力利用起来,整个项目完成速度会快很多。
第三,Vue 3 + Element Plus 是目前开发后台管理页面效率较高的组合。Vue 3 的组合式 API 适合维护列表状态,Element Plus 提供表格、表单、弹窗、分页等现成组件,可以省去大量手写 CSS 和交互逻辑的时间。
1.3 一次“新增学生”请求的完整链路
页面点击“新增”按钮后,数据流会经过下面这些环节:
- Vue 页面把表单数据交给 Axios,发起
POST /api/students请求。 - 开发环境下,Vite 代理把
/api前缀请求转发给后端http://localhost:8080。 - Spring Boot 的
StudentController接收 JSON,转成Student实体。 StudentService做学号重复性校验。StudentRepository把实体写入 MySQL 的student表。- 后端返回统一结果
Result,前端判断code是否为成功,然后刷新列表。
理解这条链路之后,后续所有报错都能归类到某一层:前端页面问题、接口请求问题、后端逻辑问题、数据库问题。下面从环境开始逐步搭建。
2. 环境准备:先把 JDK、MySQL、Node 版本统一起来
2.1 各组件版本与安装确认命令
学生管理系统涉及 Java、Maven、MySQL、Node.js、Vite 等多套工具链,版本不一致时最容易出现“别人能跑,我不能跑”的情况。建议先按照下表的版本范围准备。
| 组件 | 建议版本 | 说明 |
|---|---|---|
| JDK | 17 或更高 | Spring Boot 3 强制要求 Java 17+ |
| Maven | 3.6.3 或更高 | 用于构建后端工程 |
| Spring Boot | 3.2.x | 以稳定 LTS 风格的 3.x 版本为准 |
| MySQL | 8.0.x | 支持 utf8mb4 和更完善的 SQL 功能 |
| Node.js | 18 或 20 LTS | Vite 5 需要 Node 18+ |
| npm | 随 Node 安装 | 也可使用 pnpm、yarn |
| Vue | 3.4+ | 使用<script setup>语法 |
| Element Plus | 2.x | 与 Vue 3 配套的管理端组件库 |
安装完成后,不要在 IDE 里有多个 Java 版本时凭感觉判断,先用命令行确认:
java -version mvn -v node -v npm -v mysql --version如果java -version显示的仍是 Java 8,Spring Boot 3 启动时会直接报错。原因是 Spring Boot 3 的类文件编译版本高于 Java 8,运行时会出现类似UnsupportedClassVersionError的异常。因此最先检查的一定是命令行里的实际版本,而不是 IDE 里配置的编译器版本。
2.2 MySQL 的两种准备方式
MySQL 是系统的最终落库位置。如果本机已经安装 MySQL 8,可以直接登录创建数据库:
mysql -uroot -p如果没有安装,或者希望快速隔离一套开发环境,可以使用 Docker 运行 MySQL 8:
docker run --name student-mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -e MYSQL_DATABASE=student_manager \ -p 3306:3306 \ -d mysql:8.0这里把 root 密码设为123456只是为了本地学习方便。实际开发中,数据库账号应该使用独立业务账号,密码放入环境变量或配置中心,不要使用 root 账号直接给应用连接。如果使用 Docker,还要注意容器重启后数据是否丢失,生产环境必须挂载数据卷。
注意:
mysql --version只能证明 MySQL 客户端存在,不能证明 MySQL 服务已经启动。判断服务是否能连接,应该执行mysql -uroot -p -h 127.0.0.1 -P 3306实际登录一次。