从 ArrayList 到 Docker Compose:一个学生管理系统的四代全栈进化
·
🚀 一个项目,四种写法。从 Java 零基础到 Spring Boot + Vue3 + Docker 全栈部署,每一代都新增 16 项企业级工程实践。
先看四代演进(一张图)

这四代代码都在同一个仓库里,每一代都是独立可运行的完整项目。
为什么做这个项目?
市面上的「学生管理系统」教程要么太简单(一个 Servlet 增删改查就结束了),要么直接丢一个 Spring Boot 脚手架让人抄。
没有一个项目能展示「从菜鸟到能干活」的完整成长路径。
所以我做了这个——四个版本,从 Java 基础语法一直写到 Docker 部署,每一代都是一个台阶。
四代对比(一张表看懂)
| 维度 | 🏘️ 新手村 | 🏙️ 进阶版 | 🚀 宇宙版 | ☄️ 爆炸版 |
|---|---|---|---|---|
| 界面 | 控制台 | 控制台表格 | 浏览器 SPA | Vue3 + Vite + TS |
| 存储 | ArrayList | SQLite | H2 | MySQL 8.0 |
| 缓存 | — | — | — | Redis 7 |
| ORM | — | JDBC | JPA | JPA + Specification |
| 安全 | 明文存储 | BCrypt 哈希 | JWT 单 Token | JWT 双 Token 旋转 |
| 对象转换 | — | — | — | MapStruct (编译期) |
| 分页 | 无 | 前端假分页 | 前端假分页 | 后端真分页 |
| 数据库迁移 | — | — | — | Flyway |
| API 文档 | — | — | — | Knife4j/Swagger |
| 异常处理 | printStackTrace | RuntimeException | RuntimeException | 全局异常处理器 |
| 参数校验 | 手动 if | 手动 if | 无 | @Valid 注解 |
| 日志 | System.out | System.err | 手动调用 | AOP 自动切面 + IP |
| 测试 | 无 | 无 | 无 | JUnit5 + Mockito |
| 部署 | javac | mvn exec | mvn spring-boot:run | Docker Compose |
| CI/CD | — | — | — | GitHub Actions |
| 前端工程 | — | — | 3 个 CDN 文件 | Vite + TS + Pinia |
我最满意的版本:☄️ 爆炸版
这是终版,也是我认为「一份能写进简历的项目」应该有的样子。
架构一览
┌─────────────────────────────────────────────┐
│ 🌐 Nginx :80 │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Vue 3 + Vite + TS│ │ Spring Boot :8080│ │
│ │ Element Plus │ │ ┌──────────────┐ │ │
│ │ ECharts │ │ │ Security+JWT │ │ │
│ │ Pinia │ │ │ AOP 日志 │ │ │
│ └──────────────────┘ │ │ MapStruct │ │ │
│ │ └──────────────┘ │ │
│ ┌────────┐ ┌────────┐ │ │ │
│ │ MySQL 8│ │ Redis 7│◄┼────────────────────┤ │
│ └────────┘ └────────┘ │ │ │
│ ▲ Flyway ▲ Cache │ │ │
└─────────────────────────────────────────────┘
一键启动
cd bigbang
docker-compose up -d
# 打开 http://localhost
# 管理员: admin / Admin@123
# Swagger: http://localhost:8080/doc.html
16 项工程实践
| # | 实践 | 技术 |
|---|---|---|
| 1 | 多环境配置 | application-{dev,docker,ci}.yml |
| 2 | 数据库版本迁移 | Flyway V1 + V2 |
| 3 | 双 Token JWT | Access 1h + Refresh 7d 旋转 |
| 4 | Redis 缓存 | @Cacheable 学生5min/仪表盘15min |
| 5 | AOP 切面日志 | @Aspect 零侵入 + IP 记录 |
| 6 | 全局异常处理 | @RestControllerAdvice 5 类异常 |
| 7 | Bean Validation | @Valid + @NotBlank |
| 8 | MapStruct 映射 | 编译期 Entity ↔ DTO,零反射 |
| 9 | 后端真分页 | Pageable + JpaSpecificationExecutor |
| 10 | API 文档 | Knife4j / OpenAPI 3 自动生成 |
| 11 | Docker 多阶段构建 | builder(jdk) → runner(jre) 减小镜像 |
| 12 | 健康检查 | Actuator + HEALTHCHECK |
| 13 | CI/CD | GitHub Actions: 编译→测试→JaCoCo |
| 14 | 前后端分离 | Nginx 反向代理 + Vite 开发代理 |
| 15 | JWT 无感刷新 | Axios 拦截器 401→自动 refresh |
| 16 | 方法级鉴权 | @PreAuthorize("hasAnyRole(...)") |
这个项目适合谁?
| 如果你… | 从哪一代开始 |
|---|---|
| Java 刚学到面向对象 | 🏘️ 新手村 |
| 学完 JDBC / Maven | 🏙️ 进阶版 |
| 在学 Spring Boot | 🚀 宇宙版 |
| 准备秋招/春招 | ☄️ 爆炸版(简历项目) |
| 想学 Docker/CI/CD | ☄️ 爆炸版 |
GitHub 仓库
👉 github.com/lechan775/student_management
支持中/英/日三语 README,点进去就有完整文档。
觉得有用的话,Star ⭐ 是对开源最大的鼓励。
标签
#Java #SpringBoot #Vue3 #全栈 #开源项目 #学生管理系统 #Docker #后端开发 #计算机专业 #秋招项目
更多推荐
所有评论(0)