
做Spring Boot课程设计或者毕设最容易卡住的有三件事功能模块不知道从哪里拆数据库表怎么设计才合理代码写好之后又部署不起来。我手头刚好完整跑通了一个Spring Boot传统文化传播网站项目程序、源码、数据库脚本、调试部署环境都齐全还附带一篇1万字以上的论文文档。这篇文章就把整个项目从需求拆分到部署上线的全过程写透重点讲那些踩过的问题和翻车的细节你照着做不仅能把这套东西跑起来也能快速改成自己想要的毕业设计题目。项目的系统界面截图放在文章最后面方便你直观对照。1. 传统文化传播这个题目需求到底怎么拆1.1 为什么这个业务方向很适合做JavaWeb项目传统文化传播网站剥开表面看本质上是一个内容信息发布平台。用户想看诗词歌赋、传统节日、非遗项目、历史故事管理员要在后台维护这些内容。这个业务场景和新闻网站、企业官网、博客系统非常相似但它天然自带分类体系内容划分比普通博客更清晰论文里也容易写出传播优秀传统文化的立意。数据库设计、页面展示、权限管理都可以围绕内容这条主线展开不需要堆砌特别复杂的业务规则做出来又像个完整产品这就是它适合当课程设计和毕设的原因。从技术角度看这个题目把JavaWeb的核心知识点全串起来了Spring Boot的自动配置和依赖管理、MyBatis Plus的增删改查、MySQL的表关系设计、Thymeleaf的页面渲染、Session会话控制、拦截器权限校验。做完一个项目这些知识点不再是零散的而是变成了一个能运行的整体。这也是评审老师比较看重的点。1.2 角色划分前台用户和管理员两条线我把系统拆成两条主链路一条给用户一条给管理员。前台用户侧游客可以浏览网站首页、查看文章列表、查看文章详情按分类筛选内容还可以搜索文章标题。注册并登录后可以在文章下方发表评论可以把喜欢的文章加入收藏方便下次继续阅读。整个浏览阅读流程符合一个内容网站的基本习惯没有多余的复杂操作上手成本很低。后台管理侧管理员登录成功后进入管理后台主要做七件事管理注册用户账号、管理文章分类、发布和编辑文章、删除违规评论、查看收藏情况、维护首页轮播图、发布网站公告。两条线的功能边界非常清楚。用户侧重点在展示和互动管理侧重点在内容维护。边界清楚的好处是什么开发的时候可以分模块推进写代码不打架写论文也好分章节。我在做系统设计的时候就是按这个双端七模块的思路来画用例图的。1.3 一个完整的使用场景是什么样的拿用户浏览的一条完整路径来说。用户打开网站在首页看到轮播图和最新文章推荐点进传统节日分类看到这一类文章的列表再点标题进入详情页阅读完整正文。读到一半觉得文章写得好点收藏按钮收入个人书架读完在评论区写下自己的感受提交评论。管理员这边的场景是登录后台后在评论管理里看到用户新增的评论选中某条可以删除在文章模块里点击新增文章填写标题、选择分类、上传封面图、填写正文点击发布文章立刻在网站前台显示出来在轮播图管理里上传一张新的节日海报设置跳转链接首页的轮播图马上更新。这种场景描述放进论文的需求分析部分评审老师一眼就能看懂系统是干什么的画用例图也有现成素材。所以做项目第一步不是急着写代码而是先把这个场景捋顺越具体越好。2. 技术选型和开发环境为什么最终定格在这些工具上2.1 开发环境清单项目标题里写明了包含开发环境意思是拿到手上后环境照着配就能在本地完整跑起来。我自己的环境组合如下供参考。工具版本实际用途JDK1.8运行Java程序的基础环境IDEA2021.3以上写代码、跑项目Maven3.6.3以上管理依赖、项目打包MySQL5.7或8.0存储业务数据Navicat任意版本可视化操作数据库浏览器Chrome或Edge验证页面效果这套组合不挑机器学校机房、自己的笔记本都能装。版本不用刻意追求最新够用、稳定、出问题能搜到答案才是关键。我见过不少同学上来就装最新版JDK结果Spring Boot老项目启动不了来回折腾半天最后发现是版本兼容问题真的很浪费时间。2.2 Spring Boot版本选择2.7.x比3.x更适合课程设计现在Spring Boot已经出到3.x了但我在这个项目里还是用2.7.x。原因很现实3.x要求JDK17起步很多同学的本地环境还是JDK8学校的教材、课程设计模板也大多基于JDK8。如果项目用Spring Boot 2.7.18既能稳定跑在JDK8上又不会像早期2.1、2.2版本那样出现各种兼容麻烦。另外Spring Boot 2.7.x的自动配置、Starter机制和3.x核心思路差距不大学到的原理后面迁移到新版本也成立。网上关于2.7.x的教程和报错解决方案特别多遇到问题一搜就有答案这对项目进度来说是实打实的保障。2.3 ORM选型MyBatis Plus让单表操作省出一半时间数据库操作我用的是MyBatis Plus不是原生MyBatis。拿文章表来说基础的增删改查方法在BaseMapper接口里已经自带selectById、insert、updateById、deleteByIdService层通过IService接口也能直接拿到getById、save、updateById、removeById这些方法。相比手写MyBatis的XML映射文件工作量至少省三分之一。那么多表关联怎么处理比如文章列表要显示分类名称评论列表要显示用户昵称这种场景我在Mapper的XML里写JOIN查询MyBatis Plus并不限制自定义SQL。用它的核心策略是单表操作用内置方法多表操作用自定义SQL两手抓既不累又能应对复杂需求。2.4 前端方案Thymeleaf服务端渲染不搞前后端分离前端我用Thymeleaf模板引擎搭配Bootstrap没有把项目拆成前后端分离架构。对课程设计和毕设来说这个选择非常明智。如果搞Vue加Spring Boot前后端分离意味着要单独管理前端项目、处理跨域、多学一套Node环境周期拉长不少。Thymeleaf的好处是所有页面服务端渲染项目启动后直接在浏览器访问localhost:8080就能看到完整系统部署也简单打一个jar包全部搞定。配合Bootstrap的栅格系统和组件库页面的视觉设计一样可以做到位。做传统文化主题页面时主要把配色换成暗红、米黄、墨色这些偏古风的色调标题用带书法感的字体界面放进论文里辨识度很高。3. 数据库设计8张表怎么撑起整个传统文化网站3.1 从需求到数据表核心表结构拆解数据库层面的设计我是围绕内容来做的最终建了8张核心表。第一张是管理员表字段主要是id、账号、密码、创建时间。第二张是注册用户表记录用户名、密码、昵称、头像、注册时间。第三张是文章分类表存分类名称、排序、状态。第四张是文章表整个系统的核心包含标题、摘要、正文、分类ID、封面图、浏览量、发布状态、创建时间。第五张是评论表关联文章和用户。第六张是收藏表同样关联文章和用户。第七张是轮播图表存图片路径、跳转链接、排序。第八张是公告表存公告内容、发布时间、状态。文章表的字段设计要单独说一句。正文用TEXT类型可以存较长的内容摘要用VARCHAR(500)发布状态用TINYINT0表示草稿1表示已发布。这些字段设置直接决定后台编辑功能和前台展示逻辑怎么实现。分类表里的排序字段也很关键决定前台分类导航里分类出现的先后顺序。3.2 表之间的关系是怎么画的把这8张表的关系理清楚文章和分类是多对一关系一篇文章属于一个分类一个分类下可以有多篇文章文章和评论是一对多关系一篇文章可以有多条评论用户和评论是一对多关系一个用户可以评论多篇文章用户和文章通过收藏表形成多对多关系一个用户能收藏多篇文章一篇文章也能被多个用户收藏。我特意没有在数据库层加物理外键只在逻辑上维护关联。原因很简单删除文章时如果有物理外键约束必须先删评论、删收藏、再删文章顺序错了直接报错。用逻辑外键代码里控制删除顺序就行省掉一个大坑。这个设计经验在论文的数据库设计章节里也可以写进去算是一个设计亮点的说明。3.3 建表SQL的关键片段下面是文章表的建表SQL可以直接拿去做参考。CREATE TABLE content_article ( id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(200) NOT NULL COMMENT 文章标题, summary varchar(500) DEFAULT NULL COMMENT 摘要, content text COMMENT 正文内容, category_id bigint(20) DEFAULT NULL COMMENT 分类ID, cover_image varchar(255) DEFAULT NULL COMMENT 封面图, view_count int(11) DEFAULT 0 COMMENT 浏览量, status tinyint(4) DEFAULT 1 COMMENT 0草稿 1发布, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT传统文化文章表;字符集一定用utf8mb4这样才能完整存储生僻字和特殊符号。传统文化内容里经常碰到生僻古文、注音符号、各种异体字如果用了utf8或者latin1入库就乱码前台页面显示出来也是问号。这个细节很多人容易忽略真遇到了能折腾大半天。4. 项目初始化与Spring Boot代码结构4.1 从Spring Initializr开始生成工程打开IDEA在New Project里选择Spring Initializr然后填写项目坐标。Group填com.exampleArtifact填culture包名会自动生成com.example.culture。Language选JavaType选MavenPackaging选JarJava Version选8。这里注意Java Version要选8对应本地的JDK版本不要默认选最新的。Dependencies这一步我勾选了Spring Web、Thymeleaf、MySQL Driver、Lombok。MyBatis Plus不在Spring Initializr的可选列表里需要在pom.xml里手动添加依赖。Lombok是省代码利器在实体类上加一个Data注解自动生成getter和setter少写几百行重复代码项目看起来也清爽很多。4.2 pom.xml里的关键依赖配置MyBatis Plus的依赖写法如下注意版本要和Spring Boot 2.7.x匹配。dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.2/version /dependency这个版本兼容性好网上教程多遇到版本相关的问题容易查解决方案。如果换成更高版本比如3.5.5以上在某些Spring Boot 2.7.x组合下可能出现分页插件配置不生效的情况排查起来比较麻烦。4.3 分层架构和包结构设计包结构我按标准三层架构来分。com.example.culture ├── controller # 控制层接收请求 ├── service # 业务层接口 │ └── impl # 业务层实现 ├── mapper # 数据访问层 ├── entity # 实体类 ├── config # 配置类拦截器、密码加密等 └── common # 通用返回结果、异常处理、工具类项目骨架搭好之后后面的业务代码基本都是往这些包里填内容。论文里画系统架构图的时候直接把这个包结构向上抽象一层就是最标准的表现层-业务层-数据访问层三层架构架构评审那一块基本不需要额外费脑子。5. 核心功能实现登录、文章、评论、收藏代码怎么组织5.1 管理员登录与登录拦截器登录是后台所有功能的前置条件。管理员在登录页填写账号密码表单提交到/admin/login接口Controller里用QueryWrapper查管理员表然后比密码。密码我用了MD5加盐存储数据库里不存明文安全性在论文里也说得过去。登录成功后把管理员id和账号放进Session标记登录状态。紧接着要处理一个关键问题不加拦截的话用户手工输入后台URL就能跳过登录这是很多项目容易忽略的漏洞。解决思路是写一个WebConfig类实现WebMvcConfigurer接口注册HandlerInterceptor拦截器。拦截器里对/admin/**路径做判断如果Session里没有管理员信息就重定向到登录页。这个拦截器的代码量很小但价值很大论文的安全性设计章节也有的写。5.2 文章列表分页与详情逻辑前台文章列表分成两类。一类是按分类进入的列表页另一类是首页推荐的混合列表都走同一个Service方法。根据QueryWrapper构造条件调用MyBatis Plus的分页查询传给分页参数current和size返回结果封装成统一Page对象包含当前页数据、总条数、总页数。前端用Thymeleaf的each属性循环渲染底部分页导航用Bootstrap的翻页组件。文章详情页的逻辑不多但有个细节值得留意每访问一次详情页浏览量加1。这个更新直接在Controller里处理后调用update方法给viewCount字段加1不需要额外写定时任务也不用Redis做计数器简单直接有效。测试的时候你刷新一次页面数字变一次效果立竿见影。5.3 评论和收藏用户互动的两个入口评论的逻辑是用户登录状态下提交评论后端拿到文章ID、用户ID、评论内容插入评论表。列表查询评论时用JOIN关联用户表把评论人的昵称显示出来。管理员后台多了删除评论的权限。这里要注意的是插入评论前判断一下用户是否登录前端按钮控制加后端Session校验双保险。收藏逻辑也类似。用户点收藏按钮前端发请求到/favorite/add接口后端判断这个文章和用户的组合是否已存在存在就提示已收藏不存在就插入收藏表。个人中心里再做我的收藏列表分页展示支持取消收藏。这几个交互逻辑都不复杂但能把系统的功能完整度拉高一个档次非常值得写上。5.4 接口设计的一个小规范所有的接口返回值我统一封装成一个Result对象包含code、message、data三个字段。code等于200表示成功code等于500表示服务端异常400可以表示参数错误。前端拿到这个统一结构后根据code做判断该提示就提示该跳转就跳转不会出现页面卡死或者白屏。这个Result类放在common包里是全局通用组件。写论文的时候在系统设计章节提一句统一响应格式设计再贴一下类的代码这部分的篇幅和质量就都有了。6. 调试部署全流程从本地跑起来到服务器上线6.1 第一步导入数据库打开Navicat新建数据库culture_db字符集选utf8mb4排序规则选utf8mb4_general_ci。然后右键运行SQL文件把项目里的culture_db.sql导入。导入完成后刷新数据库能看到8张表以及部分测试数据。SQL文件里如果已经带测试数据网站一启动就有内容可看不需要手工逐条录入这对验收演示特别重要。6.2 第二步修改配置并启动用IDEA打开项目等待Maven下载依赖。修改application.yml里的数据库账号密码改成自己本地的MySQL账号密码。admin账号密码可以在SQL文件里提前查好也可以先改数据库。然后直接运行启动类里的main方法。控制台能看到Spring Boot的彩色Logo看到Tomcat started on port(s): 8080这行日志说明本地启动成功浏览器访问localhost:8080就能看到网站前台。6.3 几个最容易翻车的启动报错跑这种项目时我见过不少同学踩坑这里直接列出最常见的四个报错和解决办法。第一个是端口被占用。IDEA控制台报Port 8080 was already in use打开任务管理器找到占用8080端口的进程结束掉或者把application.yml里的server.port改成其他端口比如8081。第二个是数据库连不上。报Access denied for user rootlocalhost基本可以确定是账号或密码配置错了去application.yml核对。第三个是时区报错。报The server time zone value相关错误解决方式是在JDBC连接URL后面加上serverTimezoneAsia/Shanghai完整写法是jdbc:mysql://localhost:3306/culture_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai。第四个是找不到模板页面。报Error resolving template多半是Thymeleaf页面路径写错。检查Controller里return的页面名和templates目录下的文件路径是否一致这个排查思路可以用浏览器地址栏的路径反推。6.4 打jar包并部署到服务器本地跑通后要部署到服务器先执行Maven的package命令打成jar包。在IDEA右侧Maven面板双击packagetarget目录下会生成culture-0.0.1-SNAPSHOT.jar。服务器上安装JDK8和MySQL把jar包用FTP工具传上去执行java -jar culture-0.0.1-SNAPSHOT.jar如果希望关闭窗口后项目不退出用nohup方式启动nohup java -jar culture-0.0.1-SNAPSHOT.jar app.log 21 这里有一个非常关键的坑服务器上的MySQL端口、账号、密码通常和本地不一样所以一定要在jar包同目录放一个外部的application.yml覆盖包内的默认配置。Spring Boot读取配置时外部配置文件优先级高于jar包内部的这个机制用对了能省很多事。6.5 部署完后如何自测部署完成后不要急着交差按这个顺序自测一遍浏览器打开服务器IP加端口先看网站首页能否正常加载图片能不能显示点进一篇文章详情看浏览量是否加1尝试注册一个新用户再登录发表评论用管理员账号进后台新增一篇测试文章回前台看是否出现。都走通了项目才算真正交付。7. 关于论文文档和系统界面的几点说明7.1 万字论文的内容结构项目附带的论文文档字数在1万字以上论文结构按标准毕设模板来写。一上来是摘要和关键词然后第一章绪论写背景和意义第二章相关技术介绍写Spring Boot、MyBatis Plus、MySQL、Thymeleaf第三章系统分析第四章系统设计第五章系统实现和功能展示最后是测试和总结。这个结构是学校普遍认可的框架照着填充内容就行不用自己另起炉灶。其中测试章节不用写得太复杂围绕登录、文章发布、评论、收藏这几个核心功能写几个典型测试用例列出输入、操作步骤、预期结果、实际结果一个表格列出来就是不少篇幅看起来还特别规范。系统架构图、功能模块图、数据库E-R图这三张图是论文的硬通货务必放上去。7.2 系统界面的截图放在最后项目提供的系统界面截图放在文档的最后面包括网站首页、文章列表页、文章详情页、登录页面、后台管理界面等。把截图按顺序插入论文的系统实现那一章配合文字说明整个项目的完整度一下子就体现出来了。提个建议拿到这类项目之后不要只满足于把项目跑起来。先把数据库表关系用纸画一遍再跟着Controller到Service再到Mapper的调用链走一遍理清一套流程后这个项目才真正属于你。改页面样式、增加字段、换图片素材都是小工程核心代码逻辑吃透了任何传统文化网站的需求你都能往里套。最后再说一句我实际跑这个项目时唯一的教训就是数据库字符集一开始图省事用了默认的utf8导入带生僻古文的测试数据直接乱码后来把所有表改成utf8mb4才解决。你如果照着这个项目做建库时一定注意这一点能省下后面查乱码的大量时间。