又是一年毕业设计季。每年这时候都会碰到一批人卡在同一个地方:选了个"基于Spring Boot + Java的学习网站系统"这种经典题目,结果从看题目到动手之间没有任何缓冲——源码能跑起来了,但被老师一问底层原理就发怵;文档写完了一看像说明书摘抄;视频讲到最后自己都不知道重点在哪儿。这篇文章想说的,其实不是让你改用一个更炫的题目,而是把这套流传极广的选题从里到外拆透:前端浏览器里能看见的选课、播放、记录只是冰山一角,后端的权限控制、资源映射、文件链路、部署顺序才是你答辩时真正要讲的干货。
文章适合正在做同类毕设、或者刚接手这类全栈项目的读者,我会从项目需求一直聊到文档和视频的准备工作,每一段都是能直接参考的实操经验。
1. 学习网站系统到底在做什么:先看边界再看功能
很多人拿到这个题目第一反应就是"做一个B站"——这个想法很危险。一个学习网站的毕设题目,本质不是视频平台,而是资源流程管理。你真正要解决的是三件事:什么人能看什么课、课程里的视频和课件怎么存怎么放、用户看到一半下次怎么接着学。把这三件事想清楚,需求模型就立住了。
1.1 从角色分页出发,把权限边界画出来
推荐你来设计两套角色:前台使用者(学生或普通用户)和后台运营者(管理员)。学生端的功能围绕"学"展开——注册登录、按分类浏览课程、查看课程详情、学习视频/课件、保存学习进度;管理员端围绕"管"展开——课程分类管理、课程信息上下架、视频和课件资源上传、用户账号维护。这个模型不用做得特别庞大,但角色边界必须清楚,字段设计上就要用 role 区分。
我当时设计的用户表核心字段长这样,简单但够用:
code复制sys_user
- id 用户ID
- username 登录账号(唯一索引)
- password BCrypt加密后的密码
- nickname 昵称
- role 角色标识:1是管理员,0是普通用户
- avatar 头像地址
- create_time
权限这块不建议自己手写一套复杂实现。Spring Boot项目里最常见的是Spring Security + JWT,也有用Shiro + JWT的。如果项目已经围绕MyBatis Plus在做CRUD,Spring Security的UserDetailsService与数据库用户表对接起来非常自然。用拦截器放行登录接口和Swagger文档路径,其余请求校验Token,这是最稳的组合。
1.2 功能模块到底该拆多细:一门一表还是一课一行
你后面写文档和画架构图的时候会发现,模块拆解直接决定你数据库表设计的复杂程度。常规的设计方案是:
course_type:课程分类表,一级分类就够了,避免递归查询和前端级联保存的麻烦。course:课程主表,放课程名称、封面图、教师、简介、所属分类、点击量。不要把视频地址直接塞在主表里,因为一门课会有多集视频,这属于典型的一对多关系。course_section/course_video:课程章节与视频集表,小节持有course_id外键,视频地址存相对路径而不是完整URL。study_record:学习记录表,记录用户ID、课程ID、最近学到的小节ID以及最后观看时间点,这比单独做"收藏夹"更有实际演示价值——下次打开页面可以直接定位在没看完的那一段。sys_resource:统一文件资源表,可选的,但强烈建议加。它记录文件名、磁盘相对路径、文件类型、大小、上传人ID。这样无论你后续上传封面、课件还是视频,前端只拿一个文件ID就能拼出访问链接。
一个看起来正经的毕设,有用户、课程分类、课程、小节、学习记录这五张主表就非常稳了。再额外加一个评论表也行,但不是必需项,时间紧的时候可以先放一放。
为什么很多人的项目"看起来不完整"?问题往往不在表少,而在表之间缺乏一条从登录到学习的完整链路。你展示时先登录学生账号,点进课程页点视频,再看库里 study_record 多了一行,这才叫跑通了。单纯的上下架课程对毕设评委来说没有冲击力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型的取舍逻辑:别追最新版,要追最大兼容性
学习网站这套系统,前端用Vue + Element UI 或 简单thymeleaf都能行,后端几乎清一色Spring Boot。但具体版本怎么选,很多人不假思索直接下载最新Spring Boot——这正好踩中了社区里最常出现的坑:"springboot版本太高"。版本高意味着Spring Security、MyBatis Plus、一些第三方Starter的兼容性文档可能还停在前一两个版本,百度到的问题答案全对不上号。
2.1 为什么强烈建议JDK 8 + Spring Boot 2.7.x
这是我在多次项目实操后得出的最省心组合。JDK 1.8与Spring Boot 2.7.18这个搭配虽然在2024年之后不再有社区更新,但成熟度和第三方依赖的覆盖程度遥遥领先。如果你的电脑装了JDK 17甚至21,新建Spring Boot 3项目也很简单,但请注意三点:
- Spring Boot 3从
javax.*包切换到了jakarta.*包,很多网上的老代码复制下来直接报红线。 - Spring Security 6的配置写法变化非常大,旧版的
WebSecurityConfigurerAdapter已经删除,很多人卡在这条上一下午就没了。 - 你将来如果要把项目打包成Docker镜像,JDK 8版本的镜像自带
java:8足够轻量,JDK 17镜像体积明显更大。
除非你的任务是硬性要求Spring Boot 3,否则没必要给自己挖坑。老师看的是系统设计和业务逻辑的完整度,只要你在答辩时能说出"我为什么选这个版本"就是加分项。热搜词里大量出现"java安装""java环境变量配置",说明很多读者基础环境就卡住了。JDK 8的安装和环境变量配置教程多、坑少,对新手极其友好。
2.2 组件搭配:CRUD、鉴权、缓存,每一样都能讲出道理
我建议的项目依赖组合:
| 组件 | 用途 | 选型理由 |
|---|---|---|
| Spring Boot 2.7.x | 基础框架 | 默认整合大量Starter,配置简化 |
| MyBatis Plus 3.5.x | ORM与CRUD | 单表不写SQL,自带分 |
