
这次我们来看一个能直接跑起来的前后端分离毕设项目基于 Spring Boot 与内容推荐算法的手工编织非遗平台。很多同学做毕设选题时都会遇到同一个问题——课程里只练过单机管理系统没有推荐模块项目做完看起来就是“纯增删改查”答辩时缺少亮点。这个项目的价值在于它在常规 CRUD 基础上加了一层基于内容的推荐算法同时拆成前端和后端两份工程源码资料齐全导入数据库、启动后端、启动前端就能把完整流程跑通。这个项目最值得关注的几个点技术栈主流Spring Boot 做后端服务Vue 做前端页面前后端通过 HTTP 接口通信推荐算法不是空架子而是根据手工艺品的分类、标签、用户收藏等行为数据做相似度计算生成个性化推荐列表后台管理界面带完整的增删改查覆盖用户管理、作品管理、分类管理和互动信息管理附带的源码资料可以直接导入 IDE启动后通过浏览器访问页面非常适合毕设演示和二次开发。本文会带你把下面这些事完整过一遍梳理项目技术栈和功能模块。准备本地开发环境。初始化数据库并导入 SQL。启动后端 Spring Boot 服务。启动前端 Vue 服务。测试注册登录、作品浏览、收藏评分、内容推荐、后台增删改查。讲清楚内容推荐算法的实现思路。整理接口调试方式和批量处理方法。给出常见问题排查表。如果你正在选毕设题目或者想找一个带推荐算法的前后端分离项目练手这篇文章可以直接收藏。1. 核心能力速览能力项说明项目类型Spring Boot Vue 前后端分离 Web 应用后端技术栈Spring Boot、MyBatis / MyBatis Plus、MySQL具体以源码为准前端技术栈Vue、Element UI / Element Plus、Axios具体以源码为准核心业务非遗手工编织作品展示、分类浏览、搜索、收藏、评论、评分推荐能力基于内容特征的推荐算法按用户行为和物品标签生成 TopN 推荐列表后台管理用户管理、作品管理、分类管理、评论/收藏管理完整增删改查通信方式前后端通过 RESTful API 交互运行方式后端 Maven 启动前端 npm 启动浏览器访问页面部署难度中低适合毕设、课程设计、Java Web 练手适合场景非遗文化数字化展示、手工艺品类内容平台、推荐系统入门学习需要先说明一点这篇文档里涉及具体端口、数据库名、接口路径的地方我会给出常用写法但实际项目以你拿到的源码为准。你导入后先看配置文件再动手改不要盲目复制。2. 适用场景与使用边界先说适合谁。最容易从这类项目里拿到收益的是三类人第一类是计算机相关专业准备毕设的学生需要一个前后端分离、有推荐算法、能演示增删改查的完整项目第二类是正在学 Spring Boot 的开发者想看看真实项目里 Controller、Service、Mapper、前端页面是怎么串起来的第三类是对推荐系统感兴趣但还没做过完整实现的人可以通过这个项目理解基于内容推荐的基本流程。它能解决的问题也比较明确一是把非遗手工编织作品从线下展示搬到线上提供分类浏览、关键词搜索、详情查看二是通过用户收藏、评分等行为数据给不同用户推荐不同类型的手工编织作品三是给管理员提供一套后台管理界面对平台内容做增删改查不需要直接改数据库。但也别对这个项目有不切实际的期待。它更偏向“毕设级”和“练习级”不是高并发电商平台推荐算法也不是深度模型。如果目标是放到生产环境支撑大量用户访问还需要补缓存、限流、监控、安全校验等一系列工程能力。如果目标是推荐效果达到抖音、淘宝那种水平那需要换协同过滤、向量召回、排序模型等更复杂的方案。使用边界也要注意。第一项目里的示例数据如果包含真实非遗作品素材仅限学习演示不要擅自商用如果要把平台发布上线需要确认图片、文字资料的版权和肖像授权。第二毕设项目场景下建议把这份源码理解为“学习参考”不要原样提交给学校至少要把项目结构、核心代码逻辑、推荐算法细节读懂再决定怎么改造成自己的作品。第三项目涉及用户注册和登录如果二次开发后部署到公网要补上密码加密、接口鉴权、数据脱敏等安全措施。3. 项目技术栈与推荐算法原理3.1 技术栈拆解从项目标题和常见毕设实现来看这个项目可以拆成三个部分前端展示层、后端服务层、数据存储层。前端展示层的核心任务是渲染页面和调用后端接口。常见做法是用 Vue 全家桶配合 Element UI 或 Element Plus 搭建后台管理界面Axios 负责发送 HTTP 请求。页面一般包括用户端的手工编织作品列表、作品详情、分类导航、登录注册以及管理端的用户管理、作品管理、分类管理。后端服务层的核心任务是对外提供 RESTful API处理业务逻辑。Spring Boot 负责接口暴露和依赖管理Controller 层接收前端请求Service 层处理业务Mapper 层操作数据库。如果使用 MyBatis Plus很多单表增删改查连 SQL 都不用手写直接继承 BaseMapper 就行这对毕设来说开发效率非常高。数据存储层的核心是 MySQL。项目通常会有用户表、作品表、分类表、收藏表、评论表、评分表等。为了支持推荐算法表结构里一般会留出标签、分类 ID、用户行为时间等字段方便后续做特征计算。下面是一张简化版的模块划分具体类名和表名以源码为准模块主要功能数据表示例用户模块注册、登录、个人信息user作品模块手工编织作品展示与检索handwork分类模块按编织类型维护分类category互动模块收藏、评论、评分favorite、comment、score推荐模块基于内容相似度生成推荐复用上述行为与作品表管理模块后台数据增删改查对应各业务表3.2 内容推荐算法原理标题里最核心的关键词是“内容推荐算法”。这不是深度学习那种复杂模型而是推荐系统里最基础的思路根据物品本身的特征和用户的历史行为计算用户与物品的相似度。基于内容的推荐一般分四步第一步构建物品画像。手工编织作品有哪些特征可以提取典型特征包括所属分类比如绳编、竹编、毛线编织、材质棉线、麻绳、藤条、地区流派不同地区的非遗特色、难度等级、热度等。这些特征可以直接从数据库字段里取得。第二步构建用户画像。根据用户对作品的收藏、评分、浏览记录把用户偏好的物品特征聚合起来。比如用户收藏了大量竹编作品那么“竹编”这个特征在用户画像里的权重就更高。第三步计算相似度。常用的方法有余弦相似度、杰卡德相似系数、皮尔逊相关系数。毕设场景最常用的是余弦相似度因为计算简单解释起来也直观。第四步生成推荐列表。把用户画像向量和所有作品的特征向量做相似度计算按相似度从高到低排序取前 N 个物品就是用户可能感兴趣的作品列表。这个算法对毕设来说足够明确适合写在论文的原理分析章节也适合在答辩时当场演示“不同用户看到的推荐结果不一样”。4. 本地部署环境准备在导入源码之前先确认本机环境。这个项目是前后端分离结构涉及 Java、Maven、MySQL、Node.js 四类基础环境。4.1 环境清单工具用途版本建议JDK编译和运行 Spring Boot 后端JDK 8 / JDK 11 / JDK 17以源码 pom.xml 为准Maven管理后端依赖和启动 Spring BootMaven 3.6 以上MySQL存储业务数据MySQL 5.7 / MySQL 8.0Node.js运行前端 Vue 项目Node.js 14 以上以 package.json 为准IDE导入和调试代码IDEA 或 VSCode4.2 验证命令装好环境后打开命令行执行下面几条命令确认版本号都能正常显示java -version mvn -v node -v npm -v mysql --version如果哪一条提示找不到命令就说明对应环境变量没配好先解决环境问题再继续。4.3 端口规划一个前后端分离项目在本地运行时会占用多个端口服务常见默认端口说明MySQL3306数据库服务Spring Boot 后端8080对外提供 APIVue 前端5173 或 8081Vite 项目的默认端口通常为 5173Vue CLI 默认为 8080启动前可以用命令检查这些端口是否被占用。Windows 上执行netstat -ano | findstr 8080macOS 或 Linux 上执行lsof -i :8080如果返回了进程信息说明端口被占用。可以先找到占用进程或者直接改 Spring Boot 配置里的端口。排查时优先保证后端 8080 和前端端口不冲突。5. 源码导入与启动步骤5.1 解压并确认源码结构拿到源码后先解压然后看项目根目录。通常一个前后端分离毕设项目会有以下目录结构weave-platform/ ├── backend/ # Spring Boot 后端工程 │ ├── src/main/java │ ├── src/main/resources │ ├── pom.xml │ └── sql/ # 数据库初始化脚本 ├── frontend/ # Vue 前端工程 │ ├── src/ │ ├── package.json │ └── vite.config.js / vue.config.js └── 数据库设计文档.docx如果源码里没有 sql 目录也可以去后端 resources 目录下找 .sql 文件或者在文档里找数据库脚本位置。资料包里一般都会带一份初始化脚本没有脚本的话整个项目是启动不起来的。5.2 创建数据库并导入 SQL打开 MySQL 命令行工具或者用 Navicat 创建数据库。数据库名建议和源码连接配置保持一致比如weave_platformCREATE DATABASE IF NOT EXISTS weave_platform DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE weave_platform; SOURCE /你的路径/weave_platform.sql;执行成功后可以查一下表数量确认数据结构是否完整SHOW TABLES;如果看到用户表、作品表、分类表、收藏表等说明脚本导入成功。常见的报错有两种一种是执行时提示数据库不存在先建库再执行另一种是字符集不支持确认脚本里的字符集是 utf8mb4。5.3 修改后端连接配置Spring Boot 的数据库配置一般在application.yml或application.properties里。打开后找到spring.datasource这一段把数据库名、账号、密码改成你自己本机的配置。常见格式如下server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/weave_platform?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 你自己的数据库密码 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl这里的关键点是 url 中的数据库名要和实际创建的一致密码不能写错。如果项目用的是application.properties就把同样内容改成 properties 风格server.port8080 spring.datasource.urljdbc:mysql://localhost:3306/weave_platform?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai spring.datasource.usernameroot spring.datasource.password123456 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver5.4 启动后端后端有两种常用启动方式。第一种在 IDEA 中把后端目录作为 Maven 工程导入等待依赖下载完成后找到标有SpringBootApplication注解的主启动类直接点击运行。这种方式适合调试打断点方便。第二种命令行进入后端目录先执行 Maven 编译再直接启动mvn clean package -DskipTests java -jar target/weave-platform-backend.jar注意 jar 包名称需要看实际 pom.xml 里的finalName不同项目的命名不一样。启动之后观察控制台日志出现类似Started Application in xx seconds就说明后端起来了然后在浏览器访问http://localhost:8080如果能看到空白页面或者接口返回 JSON说明后端服务正常。如果访问不到先看控制台有没有报错再检查端口是否被占用。5.5 启动前端前端工程是独立目录。命令行进入 frontend 目录先安装依赖再启动开发服务器npm install npm run devnpm install第一次执行会比较久这取决于网络环境。如果卡住不动可以切换到国内镜像源npm config set registry https://registry.npmmirror.com然后重新执行npm install。成功启动后控制台会打印前端访问地址一般是http://localhost:5173如果前端页面能打开但请求后端接口报 404 或网络错误检查前端开发服务器有没有配代理。以 Vite 项目为例vite.config.js里通常会有类似配置// vite.config.js 片段 server: { port: 5173, proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } }这样前端请求/api/xxx时会被转发到后端http://localhost:8080。如果项目没有这个代理配置前端所有请求都会直接打到 5173 端口自然无法访问到 Spring Boot 接口。5.6 访问页面前端和后端都启动成功后浏览器打开前端地址。如果能正常看到首页并且能完成注册、登录、作品列表查询说明整个项目已经跑通了。这个时候再去测推荐功能和管理员增删改查才有意义。6. 功能测试与效果验证部署成功后不要只看页面能打开就结束至少要把下面的核心流程完整测一遍。下面给出一套可以直接套用的测试清单。6.1 数据库初始化验证登录 MySQL执行USE weave_platform; SHOW TABLES;确认主要业务表都存在。重点看是否有用户表、作品表和分类表以及收藏/评分这类行为表。如果连用户表都没有登录功能不可能跑通。6.2 用户注册与登录测试在前端页面找到注册入口填写用户名、密码、手机号等信息完成注册。注册成功后使用同一账号登录。预期结果注册成功、登录成功、页面跳转到首页或后台。如果登录后返回 token后续请求会在请求头里携带 token这也是前后端分离项目常见的权限校验方式。如果登录失败优先排查账号密码是否真的写入数据库了后端日志有没有报 SQL 错误前端请求有没有发到正确的后端接口。6.3 手工编织作品浏览与搜索测试进入首页观察作品列表是否能分页加载。点击分类导航确认列表按分类过滤。在搜索框输入关键词比如“编织”“竹编”“绳编”确认返回结果与关键词匹配。这一步能同时验证前后端列表接口、分页参数、分类过滤和搜索逻辑是否正常。6.4 收藏、评论与评分测试在作品详情页操作收藏按钮然后去个人中心或收藏列表里确认记录是否存在。再给作品写一条评论刷新页面确认评论展示正常。如果有评分功能可以打一个分数比如 4 分或 5 分确认评分后作品平均分会更新。这个步骤很关键因为推荐算法依赖用户行为数据。没有收藏和评分数据推荐列表很可能是空的或者推荐结果没有差异化。6.5 内容推荐验证用两个完全不同的账号做对照测试。账号 A 大量收藏手工绳编作品账号 B 大量收藏竹编作品然后分别查看首页推荐位。预期结果账号 A 的推荐列表里绳编类作品占比更高账号 B 的推荐列表里竹编类作品占比更高。如果推荐列表没有变化说明算法计算没有用上行为数据需要检查推荐接口实现的逻辑。如果项目里设计了“猜你喜欢”“相似作品推荐”这类模块也可以一起验证。6.6 后台管理增删改查测试用管理员账号登录后台管理端。分别测试以下操作测试模块操作预期结果分类管理新增一个手工编织分类列表出现新分类分类管理编辑分类名称列表名称更新分类管理删除分类列表不再显示该分类作品管理新增一件手工编织作品前台作品列表能看到新作品作品管理编辑作品标题、分类、封面图作品详情更新作品管理删除作品前台不再显示该作品用户管理查询、禁用、删除用户用户状态按预期变化后台增删改查是毕设答辩时老师一定会重点关注的部分务必每个操作都实际跑一遍。6.7 判断标准与失败排查一个项目能被称为“可完美运行”至少满足下面几个条件前端页面能正常打开样式不缺失。登录注册流程完整。前台列表、详情、收藏、评论能正常操作。推荐模块在不同用户间产生不同结果。后台管理增删改查不报错。如果某个功能失败优先看浏览器 F12 控制台里的 Network 请求状态码。400 说明参数有问题401/403 说明权限校验失败404 说明接口路径不对500 说明后端代码运行出错。定位到是哪个接口报错后再去后端看异常日志效率最高。7. 内容推荐算法模块实现思路这一章单独展开推荐算法因为很多毕设项目的推荐模块都只是写了个简单接口没有讲清楚原理。下面用一段简化 Java 示例演示基于内容的推荐是怎么算的代码不是项目源码而是最常见的实现思路。7.1 用户特征向量与作品特征向量假设作品表里有分类字段比如“绳编”“竹编”“刺绣”还有标签字段。我们可以把一个作品表示成向量向量的每个维度代表一类特征。用户画像则来自用户历史行为的累加比如收藏了 3 个绳编作品、1 个竹编作品那么用户向量里绳编维度的值就更高。7.2 余弦相似度计算示例import java.util.HashSet; import java.util.Map; import java.util.Set; /** * 简化版基于内容特征的余弦相似度计算。 * 实际项目代码请以源码为准。 */ public class ContentBasedRecommender { /** * 计算用户画像向量和作品特征向量的余弦相似度。 * 结果越接近 1表示越相似。 */ public double cosineSimilarity(MapString, Double userVector, MapString, Double itemVector) { // 取两个向量共有的特征维度 SetString commonKeys new HashSet(userVector.keySet()); commonKeys.retainAll(itemVector.keySet()); double dotProduct 0.0; double normUser 0.0; double normItem 0.0; for (String key : commonKeys) { dotProduct userVector.get(key) * itemVector.get(key); } for (Double value : userVector.values()) { normUser value * value; } for (Double value : itemVector.values()) { normItem value * value; } if (normUser 0 || normItem 0) { return 0.0; } return dotProduct / (Math.sqrt(normUser) * Math.sqrt(normItem)); } }在实际项目里推荐逻辑一般写在 Service 中大致步骤如下public ListLong recommendWorks(Long userId, int topN) { // 1. 查询用户收藏、评分、浏览过的作品 // 2. 根据历史作品的分组和标签构建用户特征向量 // 3. 查询全部作品逐个构建作品特征向量 // 4. 计算每个作品与用户画像的余弦相似度 // 5. 按相似度降序排序取 topN 个作品的 ID // 6. 过滤掉用户已经收藏或看过的内容返回推荐结果 return resultIds; }这里有一个比较容易踩的坑如果用户没有任何行为数据用户向量为空所有相似度都是 0。这种情况就是推荐系统的冷启动问题。毕设项目里一般会做一个兜底方案比如冷启动时直接返回热度最高的作品或者返回最新上架的作品保证推荐位不为空。7.3 推荐算法扩展方向如果想把推荐模块做得更有亮点可以在现有内容推荐基础上加两点。第一把用户行为加权分层收藏算 3 分、评分算 2 分、浏览算 1 分让不同行为的权重不同。第二加入协同过滤思路在内容推荐结果之外再找与当前用户行为相似的其他用户把那些用户偏好的作品补充进来形成“混合推荐”。把这两种策略写进论文里推荐模块的完整性和工作量都会显著提升。8. 接口 API 与批量管理8.1 RESTful 接口结构前后端分离项目的核心是接口。如果你的毕设论文里需要画接口文档或写接口测试可以按下面的通用框架去源码里找对应 Controller 映射。下面路径是示例不是源码固定路径。模块方法接口路径示例说明用户POST/api/user/login用户登录用户POST/api/user/register用户注册作品GET/api/works/page分页查询作品作品GET/api/works/detail/{id}查询作品详情收藏POST/api/favorite/add添加收藏收藏DELETE/api/favorite/{id}取消收藏评论POST/api/comment/add发布评论评分POST/api/score/add提交评分推荐GET/api/recommend/{userId}获取用户推荐列表管理POST/api/admin/works后台新增作品管理PUT/api/admin/works/{id}后台编辑作品管理DELETE/api/admin/works/{id}后台删除作品8.2 curl 调用示例用 curl 测试登录接口注意把地址替换成实际接口curl -X POST http://localhost:8080/api/user/login \ -H Content-Type: application/json \ -d {username:admin,password:123456}返回结果通常是一个 JSON 对象包含用户信息和 token。8.3 Python 调用示例如果你需要在论文里展示第三方调用的可行性或者想写自动化测试脚本可以用 Python requests 快速验证import requests BASE_URL http://localhost:8080/api # 登录 login_url f{BASE_URL}/user/login login_data { username: admin, password: 123456 } resp requests.post(login_url, jsonlogin_data, timeout10) print(登录结果:, resp.json()) # 分页查询作品 works_url f{BASE_URL}/works/page params { page: 1, size: 10 } resp requests.get(works_url, paramsparams, timeout10) print(作品列表:, resp.json())如果接口需要登录后携带 token在后续请求的 headers 里追加Authorization字段即可。8.4 批量任务处理建议这个项目本质上是管理平台批量任务更多体现在后台管理操作中比如批量删除评论、批量上下架作品、批量导入分类数据。常见处理方式有两种。第一种是在现有接口基础上做批量参数前端传入 ID 数组后端循环处理DeleteMapping(/api/admin/works/batch) public Result deleteBatch(RequestBody ListLong ids) { // 循环删除或调用批量删除方法 return Result.success(); }第二种是使用简单的定时任务做数据统计比如每天统计作品热度更新推荐位数据。Spring Boot 里自带Scheduled注解不需要额外引入 MQ 就能跑定时任务。如果你的毕设想体现工程化的“批量任务”能力可以给推荐模块增加一个定时刷新逻辑每天晚上重新计算一次用户推荐数据而不是每次打开首页都现场计算这样响应速度会快很多。9. 资源占用与性能观察前后端分离项目在本地开发环境跑起来资源占用主要来自三块MySQL 数据库、Spring Boot 后端进程、Node.js 前端开发服务器。后端 Spring Boot 启动后默认 JVM 参数下会占用几百 MB 到 1GB 内存具体取决于项目引入的依赖和当前实际加载的类数量。前端开发服务器 Node.js 进程占用相对较小通常在几百 MB 以内。MySQL 服务常驻内存大概在几百 MB。所以本地开发建议内存 8G 起步如果你的机器只有 4G 内存可以顺序启动不要同时打开太多浏览器标签页和 IDE也能勉强跑但体验会比较吃力。观察资源占用有几种方式。如果只想知道当前端口对应的进程 ID 和内存占用可以用系统命令查端口。Windows 上netstat -ano | findstr 8080拿到 PID 后在任务管理器里查对应进程的 CPU 和内存占用。macOS 或 Linux 上用ps aux | grep java ps aux | grep node性能观察的重点不是只看占用数字而是理解哪些操作会突然提高资源占用首次启动后端时 Maven 下载依赖网络和 CPU 占用会短暂升高。前端npm install安装依赖时磁盘和网络占用会明显升高。首次请求业务接口时MyBatis 会加载 SQL 映射耗时比后续请求长一点。推荐模块如果每次都全量计算所有作品相似度作品量增大后接口耗时会明显上涨。图片上传、图片展示这类操作会占用带宽如果是高频场景需要考虑对象存储。如果发现推荐接口响应很慢可以先从数据量入手。比如把推荐计算改成先按分类筛掉大量无关作品再计算相似度而不是对全表 10 万条数据逐一算余弦值。还可以在作品表的关键字段上加索引比如分类字段、创建时间字段。10. 常见问题与排查方法部署这类项目时大部分问题不会出现在业务代码本身而是出现在环境配置上。下面按高频程度整理一份排查表。问题现象可能原因排查方式解决方案后端启动报数据库连接失败数据库没启动或账号密码、库名错误看控制台异常信息里的 URL、用户名启动 MySQL修改 application.yml 配置前端页面打不开前端开发服务器没启动看终端有没有打印localhost:5173地址重新执行npm run dev前端请求后端全部 404前端代理没配或后端端口不一致按 F12 看 Network 请求 URL 和端口号在前端代理配置里把/api转发到后端端口npm install非常慢或卡住默认 npm 源访问慢查看当前 registry执行npm config set registry换成国内镜像Maven 依赖下载不下来Maven 中央仓库访问慢打开项目 pom.xml 看依赖数量在 settings.xml 里配置阿里云镜像登录后没有权限调接口token 没传或过期看请求头里有没有 Authorization检查前端请求拦截器确认登录后携带 token推荐列表空白当前用户没有任何行为数据先去收藏或评分几条数据再刷新给推荐接口补充冷启动热度推荐中文数据乱码数据库字符集不对执行SHOW CREATE DATABASE weave_platform建库时使用utf8mb4导入 SQL 前确认编码页面样式错乱前端依赖版本不对看控制台有没有 CSS/JS 加载错误优先按源码里的 package.json 安装依赖版本端口被占用上一次服务没退出用 netstat -anofindstr 8080 查端口如果遇到启动后一个错误都没报但接口就是没有返回结果最直接的办法是在浏览器开发者工具里看请求响应体。返回结果如果是空数组多半是数据库里没数据如果返回 500则去后端控制台看堆栈日志。不要凭感觉猜先看日志再改代码。11. 最佳实践与二次开发建议项目跑通只是第一步真正让它变成“你自己的毕设项目”还需要做二次开发。下面几条建议很通用也很有用。第一用 Git 管理代码。拿到源码后先初始化一个 Git 仓库提交一次初版之后每次改动都留历史记录答辩前的版本至少要稳定可运行。第二理解项目结构后再动手改功能。最建议改的点是作品模块和推荐模块。给手工编织作品增加“产地”“传承人”“编织工艺介绍”字段让业务更有非遗特色推荐模块从单一内容推荐改成“内容推荐 热度兜底”再把算法逻辑写清楚论文里的核心章节就有了。第三数据库脚本备份要单独放。不要在 Navicat 里顺手改了数据库后不导出 SQL所有表结构变更都要同步到 sql 脚本里。这样换一台电脑、重新部署时可以直接恢复整套数据。第四给接口加上基本的参数校验。毕设代码里很多新增编辑接口直接用实体类接收前端参数如果前端传了空字符串后端也会写进数据库。比较好的习惯是使用 Spring 的Validated注解在实体字段上加上NotBlank等约束。第五安全合规不能省。这个项目如果只是本机演示密码加密可以暂时不做但一旦部署到服务器上至少要做三件事用户密码使用 BCrypt 等方式加密存储登录接口增加验证码或限流管理端接口增加独立的权限校验。涉及用户真实手机号、身份证、收货地址等敏感信息时必须做数据脱敏和隐私保护。第六毕设场景下不要直接提交别人的源码。正确用法是参考它的模块划分把它启动起来观察完整流程然后自己重新写关键业务代码尤其是推荐算法、后台权限、前端页面布局这三块。即使最终项目结构相似代码逻辑也必须自己能讲清楚。12. 总结与下一步这个手工编织非遗平台最值得尝试的点是它把 Spring Boot 后端、Vue 前端和内容推荐算法放进了一个完整项目里。你不需要自己去拼三份互不关联的代码而是能直接看到用户在前台收藏一间作品后后台推荐模块如何根据行为数据把相似作品推到推荐位上这是一个完整的闭环。如果你打算拿它做毕设建议按这个顺序推进先跑通部署再测推荐算法最后改业务和扩展功能。最容易踩的坑多半集中在环境配置数据库连不上、前端代理没配、npm 安装失败。这些本身也是毕设答辩时老师常问的实操问题提前踩一遍反而有好处。接下来可以继续扩展的方向不少把基于内容的推荐升级成内容加协同过滤的混合推荐给前后台做一些数据可视化大屏用 Redis 缓存热点作品和推荐结果把文件上传换成 OSS 对象存储。先把当前项目完整跑通再挑一两个方向做深入改造这个毕设的工作量和完成度都会比较可观。建议收藏备用开始动手前把这篇文章里的部署步骤和排查表过一遍可以少踩很多坑。