毕业设计实战:基于Spring Boot+MySQL的游戏分享网站设计与实现全流程指南

25 阅读13分钟

毕业设计实战:基于Spring Boot+MySQL的游戏分享网站设计与实现全流程指南

在开发“游戏分享网站”毕业设计的过程中,游戏文章审核与展示逻辑曾是核心痛点——因未在“游戏文章表”与“游戏类型表”间建立完善的关联机制,导致用户搜索特定类型游戏时出现数据错乱,耗费1天时间重构数据库关系才解决🎮。基于此次实战经验,本文将系统拆解从需求分析、技术选型到测试验收的全流程要点,为筹备内容分享类毕设的同学提供可落地的实施指南。

一、需求分析:聚焦游戏分享本质,避免功能泛化

部分同学在毕设初期容易陷入“大而全”误区,试图复制Steam等大型平台所有功能。笔者曾花费一周开发“游戏在线试玩”功能,最终因技术复杂度和偏离“攻略分享、社区交流、资源推荐”核心需求被导师要求删除。可见,明确“游戏爱好者-内容创作者”双角色需求,是控制开发范围的关键。

1. 核心用户与功能拆解(优化后权限体系)

系统用户分为管理员、普通用户两类,前期曾因内容审核权限模糊,导致未审核文章直接公开显示,明确审核流程后内容质量显著提升。具体分工如下:

管理员端(核心必做功能)
  • 用户管理:用户账号审核与维护(支持按昵称/注册时间筛选),处理用户举报,冻结违规账号;
  • 内容管理:游戏类型体系搭建(新增RPG、FPS、MOBA等分类),游戏文章审核(校验内容原创性、图片合规性),论坛帖子管理(删除违规内容、置顶优质讨论);
  • 资讯发布:发布游戏行业资讯,管理首页轮播推荐,更新热门游戏榜单;
  • 数据统计:文章发布量统计(按类型/时间维度),用户活跃度分析,点赞/踩数据汇总。
用户端(核心需求功能)
  • 文章管理:发布游戏攻略/评测(上传游戏封面、添加视频链接、撰写详细内容),管理个人文章列表(编辑/删除),查看文章互动数据(点赞数、评论数);
  • 内容浏览:按游戏类型筛选文章,查看热门推荐,搜索特定游戏攻略;
  • 社区互动:在交流论坛发帖/回帖(分享游戏心得、求助问题),点赞/收藏感兴趣文章,评论互动;
  • 个人中心:完善个人资料(游戏偏好、擅长类型),管理我的收藏,查看发布历史。

2. 需求分析避坑要点(实战经验总结)

  • 聚焦垂直场景:调研3-5个游戏社区(如NGA、机核网),收集玩家真实需求。基于“快速找到特定游戏攻略”需求,增设“游戏标签筛选”功能,实用性远于复杂的推荐算法;
  • 绘制用户路径图:使用DrawIO绘制“注册→浏览→发布→互动”完整路径,汇报时直观呈现核心业务流程;
  • 定义内容规范:明确约束条件,如“游戏封面尺寸1920×1080”“文章字数≥500字”“视频链接需支持iframe嵌入”,为开发提供明确依据。

3. 可行性分析:三维度论证,提升专业性

  • 技术可行性:Spring Boot+MySQL技术栈成熟,游戏媒体资源(图片、视频)存储方案丰富;需注意避免使用最新Spring Boot 3.x,笔者前期遭遇静态资源映射问题,回退至2.7稳定版后顺利运行;
  • 经济可行性:开发工具全免费,云存储可选七牛云学生套餐(10GB免费),CDN加速提升用户体验;
  • 操作可行性:界面设计参考“游民星空”“17173”等游戏媒体,将高频功能(文章发布、热门浏览)置于导航栏,新用户10分钟内可完成核心操作。

二、技术选型:稳定第一,避免兼容性问题

前期曾尝试Spring Boot 3.x + Vue 3前后端分离,因游戏文章富文本编辑复杂,前端渲染性能不足。调整为“Java 8 + Spring Boot 2.7 + MySQL 8.0 + JSP + Bootstrap 3 + UEditor”单体架构,富文本编辑体验更好。

1. 核心技术栈选型说明

技术工具选型理由避坑提醒
Java 8校园教学主流,游戏数据处理稳定避免使用Java 11+模块化
Spring Boot 2.7简化配置,快速搭建REST API,适合文章CRUD使用spring-boot-starter-web、spring-boot-starter-data-jpa
MySQL 8.0支持JSON字段(存储游戏标签),全文搜索性能好安装时设置字符集utf8mb4,支持游戏名称特殊字符
JSP + JSTL与Spring MVC无缝整合,直接渲染文章列表避免JSP中写复杂Java代码
Bootstrap 3提供响应式布局,快速搭建游戏卡片式展示使用3.4.1稳定版
UEditor百度富文本编辑器,支持游戏视频嵌入、代码高亮使用1.4.3版本,避免XSS漏洞

2. 开发环境搭建步骤(一次成功)

  1. 安装JDK 1.8:配置JAVA_HOME,验证java -version
  2. 安装Eclipse 2022:安装Spring Tools 4插件,工作空间编码UTF-8;
  3. 安装MySQL 8.0:创建数据库game_share_system,字符集utf8mb4;
  4. 创建Spring Boot项目
<!-- pom.xml核心依赖 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <!-- 文件上传 -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
</dependencies>
  1. 配置application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/game_share_system?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 50MB
server:
  port: 8080
  servlet:
    context-path: /game
# 静态资源映射
resources:
  static-locations: classpath:/static/,file:${upload.path}
upload:
  path: D:/game_upload/

三、数据库设计:理清游戏内容关系,避免数据混乱

数据库是内容分享系统的核心,前期因“游戏文章表”未建立与“游戏类型表”的强关联,导致分类查询效率低下。采用“游戏-文章-用户”三层模型后,查询性能显著提升。

1. 核心表结构设计(共10张表)

  • 用户表(user):id、username、password、nickname、real_name、gender、avatar、email、phone、game_preference、status、create_time
  • 游戏类型表(game_type):id、type_name、icon、description、create_time
  • 游戏文章表(game_article):id、game_name、game_type_id、cover_image、tags(JSON数组)、publisher、video_url、publish_time、content、author_id、view_count、like_count、comment_count、status(0草稿/1待审核/2已发布/3驳回)、audit_remark
  • 评论表(comment):id、article_id、user_id、content、parent_id(支持回复)、like_count、create_time
  • 收藏表(favorite):id、user_id、article_id、create_time
  • 论坛帖子表(forum_post):id、title、content、user_id、view_count、reply_count、create_time
  • 系统资讯表(news):id、title、cover、content、type、publish_time

关键避坑提醒:游戏标签用JSON数组存储!初期使用逗号分隔字符串,查询时需要LIKE模糊匹配,性能差且无法使用索引:

-- 错误做法
tags = "RPG,冒险,开放世界"
WHERE tags LIKE '%RPG%'

-- 正确做法(MySQL 8.0+)
tags = '["RPG","冒险","开放世界"]'
WHERE JSON_CONTAINS(tags, '"RPG"')

2. 表关联测试(核心查询验证)

-- 测试:查询“角色扮演”类型下点赞数最高的10篇文章
SELECT a.id, a.game_name, a.cover_image, a.tags, 
       u.nickname as author, a.view_count, a.like_count,
       a.publish_time
FROM game_article a
JOIN user u ON a.author_id = u.id
JOIN game_type t ON a.game_type_id = t.id
WHERE t.type_name = '角色扮演' 
  AND a.status = 2  -- 已发布状态
ORDER BY a.like_count DESC, a.view_count DESC
LIMIT 10;

若能正确返回游戏名称、封面、作者、浏览数、点赞数,说明关联逻辑正确。

四、功能实现:聚焦三个核心模块,突出游戏特色

1. 用户端:游戏文章发布模块(核心必做)

业务逻辑

  1. 文章编辑:使用UEditor富文本编辑器(支持图片上传、视频嵌入、代码高亮),填写游戏基本信息(名称、类型、标签、发行商),上传游戏封面(支持JPG/PNG,≤5MB);
  2. 草稿保存:支持保存草稿,下次继续编辑;
  3. 审核流程:提交后进入“待审核”状态,管理员审核通过后公开显示。

页面设计

  • 编辑页:左侧表单区(基础信息),右侧富文本编辑器,底部操作按钮(保存草稿/提交审核)
  • 预览页:模拟最终展示效果,支持响应式适配
  • 我的文章:表格展示文章列表,状态标签(草稿/审核中/已发布/已驳回)

技术要点:富文本编辑器防XSS攻击:

// 使用Jsoup过滤危险标签
public String filterHtml(String html) {
    if (StringUtils.isEmpty(html)) return "";
    Whitelist whitelist = Whitelist.relaxed()
        .addTags("iframe")  // 允许视频iframe
        .addAttributes("iframe", "src", "width", "height", "frameborder");
    return Jsoup.clean(html, whitelist);
}

2. 用户端:游戏社区论坛模块(答辩亮点)

业务逻辑

  1. 帖子发布:选择板块(攻略讨论/问题求助/玩家交友),撰写内容,支持@用户;
  2. 热度排序:帖子列表按“最新发布”和“热门讨论”双维度排序;
  3. 回复通知:用户被@或帖子被回复时,系统消息提醒。

避坑提醒:帖子热度算法设计!初期简单按回复数排序,导致旧帖长期置顶:

public double calculateHotScore(int views, int replies, LocalDateTime publishTime) {
    long hourDiff = Duration.between(publishTime, LocalDateTime.now()).toHours();
    // 威尔逊区间算法改进版:兼顾回复质量与时间衰减
    double z = 1.96; // 95%置信区间
    double p = (double) replies / (views + 1);
    double score = (p + z*z/(2*views) - z*Math.sqrt((p*(1-p)+z*z/(4*views))/views))
                   / (1 + z*z/views);
    // 时间衰减因子:24小时衰减50%
    double timeFactor = Math.pow(0.5, hourDiff / 24.0);
    return score * timeFactor * 1000;
}

3. 管理员端:内容审核与推荐模块(体现运营能力)

业务逻辑

  1. 批量审核:列表显示待审核文章,支持一键通过/驳回,驳回需填写具体原因;
  2. 内容推荐:手动置顶优质文章,设置首页轮播推荐;
  3. 数据看板:统计日/周/月内容产出量,用户活跃时段分析。

技术实现:使用Redis缓存热门文章:

@Service
public class ArticleService {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    private static final String HOT_ARTICLES_KEY = "hot_articles";
    
    public List<Article> getHotArticles(int limit) {
        // 先从Redis获取
        List<Object> cached = redisTemplate.opsForList().range(HOT_ARTICLES_KEY, 0, limit-1);
        if (cached != null && !cached.isEmpty()) {
            return cached.stream().map(obj -> (Article) obj).collect(Collectors.toList());
        }
        // Redis没有则从数据库查询并缓存
        List<Article> articles = articleRepo.findHotArticles(limit);
        redisTemplate.opsForList().rightPushAll(HOT_ARTICLES_KEY, articles.toArray());
        redisTemplate.expire(HOT_ARTICLES_KEY, 1, TimeUnit.HOURS); // 缓存1小时
        return articles;
    }
}

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试验收:全面覆盖游戏分享场景

1. 功能测试用例(重点场景)

测试场景操作步骤预期结果
用户发布含敏感词文章用户在文章标题添加敏感词→提交审核系统提示“内容包含敏感词汇,请修改后重新提交”
游戏视频链接嵌入用户添加B站视频链接→保存文章→预览文章正确显示视频播放器,可正常播放
文章收藏功能用户收藏某篇文章→进入个人中心→我的收藏收藏列表显示该文章,点击可跳转详情

2. 性能测试要点

  • 图片加载优化:使用缩略图技术,文章列表显示300×200缩略图,详情页才加载原图;
  • 数据库索引优化:为game_article表的game_type_id、status、publish_time建立复合索引;
  • 缓存策略:热门文章列表使用Redis缓存,降低数据库压力。

3. 测试报告规范

  • 发现问题:记录如“富文本编辑器XSS漏洞,已添加Jsoup过滤”“游戏标签查询性能差,改为JSON字段存储”;
  • 测试结论:“系统满足游戏分享核心需求,文章发布、社区互动、内容管理功能完整,响应速度达标”。

六、答辩准备:三个技巧提升通过率

  1. 演示剧本设计

    • 第一幕:用户注册→完善游戏偏好→浏览热门文章
    • 第二幕:发布游戏攻略(展示富文本编辑、图片上传、视频嵌入)
    • 第三幕:社区互动(发帖、回复、@功能)
    • 第四幕:管理员审核内容→设置首页推荐 (关键亮点:富文本编辑器功能、游戏视频嵌入效果)
  2. 突出技术亮点

    • 内容安全:富文本XSS过滤,敏感词检测
    • 性能优化:Redis缓存热点数据,CDN加速静态资源
    • 用户体验:响应式设计,移动端适配
  3. 预设问答准备

    • Q:如何保证游戏攻略的原创性? A:三重机制:① 相似内容检测(基于标题和内容摘要);② 用户举报处理;③ 原创作者标识体系
    • Q:系统有何创新点? A:垂直游戏社区定位,强化攻略分享场景,支持游戏视频直接嵌入,比通用博客更适合游戏玩家

结语

本文基于Spring Boot+MySQL的游戏分享网站实战,系统梳理了从需求到答辩的全流程要点。游戏类毕设核心在于“内容质量、社区氛围、技术实现”,无需追求复杂功能(如游戏下载、在线对战),将文章管理、社区互动、内容审核做扎实,即可满足答辩要求。

若需要完整源码(含UEditor整合)、数据库脚本(带热门游戏数据)、游戏封面素材包,可在评论区留言“游戏分享系统”获取;如在富文本编辑、视频嵌入等模块遇到问题,也可留言交流。

收藏本文,开发过程中随时查阅~ 祝各位同学毕设顺利,做出让玩家喜欢的分享平台!🎮✨


附:核心表结构SQL片段

-- 游戏文章表(核心表)
CREATE TABLE `game_article` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `game_name` varchar(200) NOT NULL COMMENT '游戏名称',
  `game_type_id` bigint NOT NULL COMMENT '游戏类型ID',
  `cover_image` varchar(500) DEFAULT NULL COMMENT '封面图路径',
  `tags` json DEFAULT NULL COMMENT '标签JSON数组',
  `publisher` varchar(100) DEFAULT NULL COMMENT '发行商',
  `video_url` varchar(500) DEFAULT NULL COMMENT '视频链接',
  `content` longtext COMMENT '文章内容(HTML)',
  `author_id` bigint NOT NULL COMMENT '作者ID',
  `view_count` int DEFAULT '0',
  `like_count` int DEFAULT '0',
  `comment_count` int DEFAULT '0',
  `status` tinyint DEFAULT '0' COMMENT '0草稿 1待审核 2已发布 3驳回',
  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
  `publish_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_type_status` (`game_type_id`,`status`),
  KEY `idx_author` (`author_id`),
  KEY `idx_publish_time` (`publish_time`),
  FULLTEXT KEY `ft_game_name` (`game_name`)  -- 全文索引支持搜索
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

技术栈版本推荐

  • Spring Boot: 2.7.18
  • MySQL: 8.0.33(必须8.0+,支持JSON和全文索引)
  • JDK: 1.8.0_381
  • Bootstrap: 3.4.1
  • UEditor: 1.4.3
  • Redis: 6.2(可选,用于缓存优化)

开发时间规划

  • 第1周:需求分析+数据库设计+环境搭建
  • 第2周:用户模块+文章发布模块(含富文本编辑器)
  • 第3周:社区论坛+内容展示模块
  • 第4周:后台管理+性能优化+论文撰写

游戏数据源建议

  • 游戏封面:使用Steam API获取(免费,需申请Key)
  • 视频嵌入:支持B站、YouTube的iframe嵌入
  • 游戏信息:对接SteamSpy或RAWG API(免费额度)