本文适合谁:本科应届毕业生,选择 Java + Spring Boot 做后端毕设,需要从环境搭建开始完整跑通项目的同学。如果你已经会用 Spring Boot 写接口,可以直接跳到「模块拆分」和「接口联调」两节。
每年 3-5 月是毕业设计开题与编码的高峰期,Spring Boot 仍然是本科毕设后端最主流的选择——它能让你用 1-2 周时间搭出一个能跑通业务的后台,配合 Vue/React 前端完成答辩演示。但很多同学第一次接触 Spring Boot 时,会卡在「环境装不上」「模块不知道怎么分」「接口调不通」这三件事上。
本文按毕设的真实执行顺序,拆解 6 个阶段:
- 环境配置:JDK、Maven、IDE、数据库、接口测试工具
- 项目初始化:Spring Initializr 与目录结构
- 模块拆分:Controller / Service / Mapper 三层架构
- 数据持久化:MyBatis-Plus 集成与代码生成
- 接口联调:Swagger 文档 + Postman / Apifox 测试
- 常见踩坑:FAQ 汇总
跟着做下来,你能在 1-2 天内拿到一个可演示的 Spring Boot 后台。
一、环境配置:先把这些装齐再写代码
很多同学一上来就 new project,结果半小时后才发现 JDK 版本不对、Maven 镜像没配、MySQL 密码忘了。毕设第一步永远是环境。
1.1 必备软件清单
| 工具 | 推荐版本 | 用途 |
|---|---|---|
| JDK | 17 LTS | Spring Boot 3.x 要求 JDK 17+ |
| Maven | 3.8+ | 依赖管理 |
| IntelliJ IDEA | 2023 社区版 | 主力 IDE(社区版免费) |
| MySQL | 8.0 | 主流毕设数据库 |
| Navicat / DBeaver | 任意 | 数据库可视化 |
| Postman / Apifox | 任意 | 接口测试 |
1.2 JDK 与 Maven 配置
安装完 JDK 后,必须配置 JAVA_HOME 环境变量。在终端验证:
java -version # 应显示 17.x
mvn -v # 应显示 Maven 3.8+,并指向 JAVA_HOME
Maven 镜像必配:默认仓库在国外,下载依赖会非常慢。在 ~/.m2/settings.xml 里把镜像改成阿里云:
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
Pro Tip:配好镜像后再
mvn clean install一次,让常用依赖提前下载到本地仓库,后续创建项目会非常快。
1.3 数据库准备
创建一个名为 graduation_<你的题目> 的数据库,字符集选 utf8mb4(避免 emoji 与生僻字乱码)。毕设常用 MySQL 8.0 默认就是 utf8mb4,但如果用 5.7 一定要在建库时显式指定。
二、项目初始化:Spring Initializr 一键生成
打开 https://start.spring.io,按以下选项生成:
- Project:Maven
- Language:Java
- Spring Boot:3.2.x(稳定版)
- Group:
com.<你的姓名拼音> - Artifact:
graduation-design - Dependencies 必选:Spring Web、Spring Data JPA 或 MyBatis-Plus、MySQL Driver、Lombok
下载 zip 后用 IDEA 打开,等 Maven 同步完成(右下角进度条走完)。
2.1 推荐的目录结构
com.example.graduation
├── controller/ # 接收 HTTP 请求
├── service/ # 业务逻辑(接口 + 实现)
│ └── impl/
├── mapper/ # 数据库访问
├── entity/ # 实体类,对应数据库表
├── dto/ # 前端传入的请求对象
├── vo/ # 返回给前端的视图对象
├── common/ # 公共类(Result、PageResult)
├── config/ # 配置类(CORS、Swagger、拦截器)
└── exception/ # 自定义异常与全局处理
为什么这样分? 这是阿里 / 字节内部最主流的「三层架构 + DTO/VO 分离」模式,答辩时评委一眼就能看懂你的工程化水平。
三、模块拆分:Controller / Service / Mapper 三层职责
很多毕设代码把所有逻辑写在 Controller 里,几百行下来既难维护又难答辩提问。严格的三层拆分是工程化能力的体现。
3.1 各层职责
- Controller:只做参数接收、调用 Service、返回结果,不允许写业务逻辑和直接操作数据库
- Service:核心业务逻辑,一个 Service 方法对应一个用例(例如
login、createOrder) - Mapper:纯数据库访问,只做 CRUD,不写业务判断
3.2 一个完整的示例:用户登录
Controller(UserController.java):
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public Result<String> login(@RequestBody LoginDTO dto) {
String token = userService.login(dto.getUsername(), dto.getPassword());
return Result.success(token);
}
}
Service(UserServiceImpl.java):
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public String login(String username, String password) {
User user = userMapper.selectByUsername(username);
if (user == null) throw new BizException("用户不存在");
if (!PasswordUtil.matches(password, user.getPassword())) {
throw new BizException("密码错误");
}
return JwtUtil.sign(user.getId());
}
}
Mapper(UserMapper.java):
@Mapper
public interface UserMapper {
User selectByUsername(@Param("username") String username);
}
对应的 UserMapper.xml 写 SQL:
<select id="selectByUsername" resultType="com.example.graduation.entity.User">
SELECT * FROM user WHERE username = #{username} LIMIT 1
</select>
Pro Tip:用 MyBatis-Plus 可以省掉 80% 的单表 SQL——它内置
selectById、insert、updateById等方法,只要继承BaseMapper<User>就能直接用。
四、模块拆分进阶:业务模块化
当项目超过 5 个表,建议按 业务模块 再切包,而不是把所有 Controller 都堆在一起:
com.example.graduation
├── module/
│ ├── user/ # 用户模块:Controller/Service/Mapper/Entity 都在这
│ ├── order/
│ └── product/
├── common/ # 公共代码
└── GraduationApplication.java
这样答辩时评委问「你这个项目怎么组织的」,你能指着包结构讲清楚「按业务域拆分」——这是中高级工程师的工程化能力体现。
五、接口联调:Swagger 文档 + Apifox 测试
后端写完不能只靠前端同学手动试,必须有 接口文档 和 测试工具。
5.1 集成 Swagger / Knife4j
在 pom.xml 加依赖:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
启动后访问 http://localhost:8080/doc.html,就能看到自动生成的可视化接口文档,并且能直接在线测试每个接口。这是毕设答辩演示的加分项。
5.2 前后端联调注意事项
- 统一返回格式:所有接口必须返回
Result<T>,包含code / message / data,前端不用判空 - CORS 跨域:用
@CrossOrigin或全局CorsConfig,否则前端调不通 - 统一异常处理:写一个
@RestControllerAdvice全局捕获异常,避免堆栈直接返回给前端
六、提交与演示前的 checklist
写完代码后,按这个清单逐项检查:
- [ ] 所有 Controller 方法都加 Swagger 注解
- [ ] 数据库脚本 (
schema.sql) 随项目一起提交 - [ ]
application.yml用占位符,敏感信息不入库 - [ ] 提供
README.md,写明启动步骤 - [ ] 用
mvn clean package跑通打包,再演示给导师看
常见 FAQ
Q1:Spring Boot 2.x 和 3.x 毕设选哪个?
建议选 3.2.x。Spring Boot 3 是当前主流版本,JDK 17 是 LTS 长期支持版本,企业招聘普遍要求。但如果你导师的项目还在用 2.7,跟导师保持一致更省心。
Q2:JPA、MyBatis、MyBatis-Plus 选哪个做毕设?
推荐 MyBatis-Plus。JPA 上手快但复杂查询不灵活;MyBatis 灵活但要写大量 XML;MyBatis-Plus 兼顾灵活性与开发效率,毕设 80% 的需求都是单表 CRUD,Plus 内置方法完全够用,复杂 SQL 再用 XML 写。
Q3:毕设后端需要做权限控制吗?
视题目而定。如果题目是「基于 Spring Boot 的 XX 管理系统」,必须有登录 + 角色权限(管理员 / 普通用户);如果是「算法研究 / 数据分析」类题目,可以简化。推荐用 Spring Security + JWT,学习成本低、演示效果好。
Q4:Spring Boot 项目怎么部署到服务器给导师演示?
两种主流方式:(1) jar 包部署:mvn clean package 生成 jar,上传服务器后 java -jar 启动;(2) Docker 部署:写一个 Dockerfile,用 docker build + docker run 一键启动,更显工程化。毕设演示推荐 jar 方式,简单可控。
Q5:环境装不上 / 依赖下载失败怎么办?
90% 的问题来自网络——Maven 镜像没配、Gradle 被墙。先 ping maven.aliyun.com 看通不通;不通就换成阿里云的 HTTPS 镜像;JDK 装不上检查 JAVA_HOME 与 PATH 是否生效。别在环境问题上耗超过 1 小时,环境装不上时优先找同学远程协助。
结论
毕业设计 Spring Boot 项目的搭建,本质是 3 件事:环境要齐、模块要清、接口要稳。按本文的 6 个阶段执行,1-2 天内就能拿到一个可演示的后台。答辩时,清晰的工程化结构 + 完整的 Swagger 文档 + 稳定的接口联调,比「做了多少功能」更能体现你的技术能力。
下一步建议:先在 start.spring.io 生成项目,按本文目录结构搭出 user 模块并跑通登录接口——这是 0 到 1 的关键一步。后续我会继续写 MyBatis-Plus 高级查询、Spring Security 鉴权、Docker 部署等相关内容,记得收藏本站持续更新。
相关文章: