毕业设计实战:基于Java+MySQL的光影视频平台设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

42 阅读19分钟

毕业设计实战:基于Java+MySQL的光影视频平台设计与实现,从需求到测试全流程拆解,新手也能轻松通关!

谁懂啊!当初做光影视频平台毕设时,光NBA视频表和NBA留言表的关联就卡了3天——一开始没设外键,查某条NBA视频的所有留言时数据全串错,导师看了直接让我“重画数据库E-R图”😫 后来踩遍无数坑才摸出一套高效落地流程,今天把需求分析、技术选型、功能实现到测试的细节全说透,宝子们不用再熬夜改代码,轻松搞定毕设!

一、先搞懂“光影视频平台要啥”!需求分析别瞎蒙

刚开始我跳过需求分析就写代码,花两周加了个“视频智能推荐算法功能”,结果导师一句“核心是视频信息管理与用户互动,不是复杂算法”直接打回重改!后来才明白,需求分析得先抓准“谁用系统、要干啥”,这步做对,后面少走90%弯路。

1. 核心用户&功能拆解(踩坑后总结版)

光影视频平台就两类核心用户:管理员普通用户(别加“游客角色”!我当初加了后,权限逻辑混乱,未登录就能收藏视频,最后砍掉才顺畅):

  • 管理员端(必做功能):
    • 视频管理:维护多类视频(NBA视频、papi酱视频、体育视频、艺术视频、娱乐视频的新增/修改/删除/上下架)、上传视频封面照片,支持按视频类型/名称筛选(我当初没加,找视频要翻几十页)
    • 用户管理:查看用户列表(姓名、手机号、身份证号)、重置用户密码、禁用违规账号,显示用户头像和基础资料
    • 互动管理:处理各类视频留言(审核留言内容、回复用户留言)、管理视频收藏数据,支持按视频编号筛选
    • 内容管理:新闻信息管理(发布行业新闻、维护新闻类型)、字典管理(维护视频类型/分类标签),支持按发布时间排序
  • 用户端(核心功能):
    • 视频浏览:查看多类视频列表(按类型/名称筛选)、查看视频详情(含简介、封面、点击量)、收藏感兴趣的视频
    • 互动操作:对视频留言咨询、查看他人留言及管理员回复、取消不感兴趣的视频收藏
    • 个人中心:修改个人信息(头像、手机号)、查看我的收藏/留言记录、管理个人基础资料

2. 需求分析避坑指南(血泪教训!)

  • 别光靠“空想”!找2个同学分别模拟管理员和普通用户提意见:比如有用户说“想快速区分已收藏的视频”,我才加了“收藏状态标色”(已收藏标红色星星/未收藏标灰色星星),比瞎加“智能推荐”实用多了
  • 一定要画用例图!用DrawIO画简单版,标清“管理员-管理NBA视频”“用户-收藏papi酱视频”,跟导师汇报时,比光说“我要做XX功能”直观10倍(当初没画,导师听20分钟还没get到逻辑)
  • 写“需求规格说明书”!不用复杂,把“功能描述、约束条件”写清楚(比如“视频点击量≥0”“留言内容不超过500字”“视频封面仅支持JPG/PNG”),编码时对着做,不会跑偏

3. 可行性分析别敷衍!3点写清楚就能过

导师超爱问“你这系统可行吗”,别只说“我觉得可行”,从3个核心角度写,显得专业:

  • 技术可行性:Java、MySQL、Eclipse都是课堂学过的,图书馆有《Java基础与案例开发详解》《MySQL数据库设计》,遇到问题能查资料(别用Vue3!我当初想试,前后端联调卡了一周,换回JSP才顺利)
  • 经济可行性:所有工具全免费!Eclipse(社区版)、MySQL、Tomcat官网直接下,不用花钱买版权,答辩时说“开发成本为0”,导师会觉得你懂成本控制
  • 操作可行性:界面参考主流视频平台(如B站),按钮布局简洁,我找同学测试,3分钟就学会查视频、收藏视频,导师直接认可

二、技术选型别跟风!这套组合稳到爆

刚开始我跟风用Java+Vue3+Redis,结果“视频收藏缓存”卡了5天——Redis的持久化配置没设对,重启后用户收藏记录全丢😫 后来换成Java 8+MySQL8.0+Tomcat9+Eclipse+JSP,新手友好度拉满,调试效率翻两倍!

1. 技术栈详细对比(附避坑提醒)

宝子们别盲目选“最新技术”,稳定比炫酷重要!我整理了5个核心工具的选择理由和坑点,直接抄:

技术工具为啥选它避坑提醒!(重点!)
Java 8语法简洁,支持面向对象编程,学习资料丰富,课堂重点学过别用Java 11+!部分Eclipse插件对高版本支持差,会出现“API过时”提示
MySQL 8.0支持事务和外键,存视频、用户、留言数据足够用,占内存小,支持utf8mb4编码安装时设“utf8mb4”编码!我当初用默认编码,用户姓名含特殊字符(如“䞍”)乱码,查2小时才解决
Tomcat 9.0和Java、JSP适配最好,支持热部署,启动稳定,极少崩溃别用Tomcat 10!会出现“Servlet API包名变更”,答辩时系统崩了就完了
Eclipse 2022对Java开发支持好,自带代码提示,调试工具直观,免费开源别更到2023+版本!高版本对老电脑兼容性差,经常卡顿闪退
JSP+Bootstrap快速搭建页面,Bootstrap支持响应式布局,不用手写复杂CSS别用纯HTML!视频列表和留言表单布局太麻烦,Bootstrap的组件直接套就行

2. 开发环境搭建(step by step 实操)

很多宝子卡在“环境配置”,跟着步骤来超简单,我当初一次成功:

  1. 装JDK 1.8:记住安装路径(比如D:\Java\jdk1.8.0_301),配置“JAVA_HOME”环境变量,Path中添加“%JAVA_HOME%\bin”,cmd输入“java -version”显示版本即成功
  2. 装Eclipse(社区版):选“Eclipse IDE for Enterprise Java Developers”,免费够用,首次打开勾选“Tomcat”“MySQL”插件,自动安装
  3. 装MySQL 8.0:用Navicat管理(可视化工具超方便),新建数据库“guangying_video_system”,编码设“utf8mb4”,排序规则选“utf8mb4_general_ci”
  4. 配Tomcat 9.0:在Eclipse中添加服务器,选“Apache Tomcat v9.0”,关联安装路径,启动后访问“http://localhost:8080”看到Tomcat首页即成功
  5. 初始化项目:新建Dynamic Web Project,导入MySQL驱动包,配置web.xml文件,关联JSP页面和Servlet,测试连接数据库成功即完成初始化

3. 架构图一定要画!答辩加分项

用DrawIO画Java Web分层架构图,标清“表现层(JSP)-控制层(Servlet)-业务层(Service)-数据访问层(DAO)-数据库(MySQL)”:比如用户点“收藏NBA视频”→JSP页面传请求→Servlet接收→Service校验视频状态→DAO操作数据库→返回结果。去年答辩时,评委特意夸这图“逻辑清晰”,比光说“我用了Java+MySQL”专业多了!

三、数据库设计:别让表关联坑了你

这部分是毕设的“核心骨架”,我当初没关联“NBA视频表”和“NBA留言表”,查“某条NBA视频的所有留言”要写3层嵌套SQL,调试到凌晨1点😫 后来按“实体-属性-关系”设计,终于理清了。

1. 核心实体&属性(附ER图绘制技巧)

先确定“实体”(管理员、用户、NBA视频、papi酱视频、体育视频、艺术视频、娱乐视频、各类视频收藏、各类视频留言、新闻信息),再想“属性”,别漏关键字段!我整理了必做的19张表,直接照着画ER图:

  • 用户表(yonghu):id(主键)、yonghu_name(用户昵称)、yonghu_xingming(用户姓名)、yonghu_phone(用户手机号)、yonghu_id_number(用户身份证号,唯一)、yonghu_photo(用户照片路径)、create_time(创建时间)
  • NBA视频表(nba):id(主键)、nba_name(NBA名称)、nba_photo(NBA照片)、nba_video(NBA视频路径)、nba_types(NBA类型)、nba_clicknum(点击次数)、shangxia_types(是否上架)、nba_delete(逻辑删除)、nba_content(NBA简介)、create_time(创建时间)
  • NBA留言表(nba_liuyan):id(主键)、nba_id(关联NBA视频)、yonghu_id(关联用户)、nba_liuyan_text(留言内容)、reply_text(回复内容)、insert_time(留言时间)、update_time(回复时间)、create_time(创建时间)
  • NBA收藏表(nba_collection):id(主键)、nba_id(关联NBA视频)、yonghu_id(关联用户)、insert_time(收藏时间)、create_time(创建时间)
  • 新闻信息表(news):id(主键)、news_name(新闻名称)、news_photo(新闻图片)、news_types(新闻类型)、insert_time(新闻发布时间)、news_content(新闻详情)、create_time(创建时间)

画ER图用Visio或亿图,记住3个规则:

  1. 矩形代表“实体”(比如“NBA视频”“NBA留言”)
  2. 椭圆代表“属性”(比如NBA视频的“名称”“点击次数”)
  3. 菱形代表“关系”(比如“NBA视频-NBA留言”是一对多,一条NBA视频可有多条留言;“用户-NBA收藏-NBA视频”是多对多,一个用户可收藏多条NBA视频) 避坑提醒:别把“视频文件、用户照片”存数据库!我当初存二进制导致数据库崩溃,改成存“文件路径”(比如/static/video/nba1.mp4、/static/photo/user1.jpg)才对。

2. 数据库物理设计(附建表SQL示例)

ER图画好后,转成实际表,字段类型和约束别瞎设!比如“视频点击次数”用INT,“用户手机号”用VARCHAR(11),“是否上架”用INT(1=上架,0=下架);“用户身份证号”“视频名称”设UNIQUE约束,避免重复。

给宝子们贴“NBA视频表”和“NBA留言表”的建表SQL,复制到Navicat就能用:

-- NBA视频表
CREATE TABLE `nba` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT 'NBA视频ID',
  `nba_name` VARCHAR(200) NOT NULL COMMENT 'NBA视频名称',
  `nba_photo` VARCHAR(200) DEFAULT NULL COMMENT 'NBA视频封面路径',
  `nba_video` VARCHAR(200) DEFAULT NULL COMMENT 'NBA视频文件路径',
  `nba_types` INT DEFAULT NULL COMMENT 'NBA视频类型(1-比赛集锦,2-球星专访)',
  `nba_clicknum` INT DEFAULT 0 COMMENT '点击次数',
  `shangxia_types` INT DEFAULT 1 COMMENT '是否上架(1-是,0-否)',
  `nba_delete` INT DEFAULT 0 COMMENT '逻辑删除(1-删除,0-正常)',
  `nba_content` TEXT DEFAULT NULL COMMENT 'NBA视频简介',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_nba_name` (`nba_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='NBA视频表';

-- NBA留言表
CREATE TABLE `nba_liuyan` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '留言ID',
  `nba_id` INT DEFAULT NULL COMMENT '关联NBA视频ID(外键)',
  `yonghu_id` INT DEFAULT NULL COMMENT '关联用户ID(外键)',
  `nba_liuyan_text` VARCHAR(500) DEFAULT NULL COMMENT '留言内容',
  `reply_text` VARCHAR(500) DEFAULT NULL COMMENT '回复内容',
  `insert_time` DATETIME DEFAULT NULL COMMENT '留言时间',
  `update_time` DATETIME DEFAULT NULL COMMENT '回复时间',
  `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `fk_nba_liuyan_nba` (`nba_id`),
  KEY `fk_nba_liuyan_yonghu` (`yonghu_id`),
  CONSTRAINT `fk_nba_liuyan_nba` FOREIGN KEY (`nba_id`) REFERENCES `nba` (`id`),
  CONSTRAINT `fk_nba_liuyan_yonghu` FOREIGN KEY (`yonghu_id`) REFERENCES `yonghu` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='NBA视频留言表';

3. 表关联测试!别等编码才发现错

建完表一定要测关联!比如在“NBA留言表”插数据(NBA视频ID=1,用户ID=1,留言内容=“这场比赛太精彩了”),用JOIN查询“某条NBA视频的所有留言”:

SELECT u.yonghu_name, l.nba_liuyan_text, l.insert_time, l.reply_text, l.update_time
FROM nba_liuyan l
JOIN yonghu u ON l.yonghu_id = u.id
JOIN nba n ON l.nba_id = n.id
WHERE n.id = 1;

如果能查出“用户昵称+留言内容+留言时间+回复内容+回复时间”,说明关联没问题;如果报错“Unknown column”,大概率是外键没设对,赶紧检查表结构。

四、功能实现:核心模块操作+页面设计

不用做所有功能!先搞定3个核心模块,答辩时足够出彩。每个模块我都附关键操作逻辑和页面设计要点,宝子们直接套就行。

1. 管理员端:NBA视频管理模块(必做!)

这是管理员的核心功能,实现“NBA视频信息维护+上下架控制”,重点说“视频数据校验”和“点击量统计”——别漏这两步,我当初就是这里踩了大坑!

(1)关键操作逻辑
  1. 新增NBA视频前,校验“视频名称非空”“视频类型已选择”(缺一项提示“请完善NBA视频信息”);
  2. 上传视频封面时,限制格式为JPG/PNG,大小≤3MB(避免占用过多服务器空间);
  3. 上下架控制:下架视频时,自动同步用户端“视频列表不再显示该视频”,但保留收藏和留言记录。
(2)页面设计要点(JSP+Bootstrap)

页面标题:管理员-NBA视频管理页面
(插入图片位置:此处放“NBA视频管理页面截图”,需包含以下元素)

  • 筛选区:
    • 输入框:NBA视频名称(模糊查)
    • 下拉框:NBA视频类型(全部/比赛集锦/球星专访)
    • 按钮:“查询”(蓝色btn-primary)、“新增NBA视频”(绿色btn-success)
  • 视频列表区:
    • 表格列名:索引、NBA名称、NBA照片、NBA视频、NBA类型、点击次数、是否上架、操作
    • 状态显示:上架标绿色“已上架”/下架标灰色“已下架”
    • 操作按钮:“详情”(蓝色btn-info)、“修改”(橙色btn-warning)、“删除”(红色btn-danger)、“上下架切换”(切换文字按钮)
  • 新增视频弹窗:
    • 表单元素:NBA名称(必填)、NBA类型(下拉框,必填)、NBA简介(文本域)、NBA照片(上传框,JPG/PNG)、NBA视频(上传框,MP4)
    • 按钮:“提交”(绿色)、“取消”(灰色)
(3)避坑提醒
  • 视频名称与类型校验!加逻辑:
    String nbaName = nba.getNbaName();
    Integer nbaTypes = nba.getNbaTypes();
    if (nbaName == null || nbaName.isEmpty()) {
        return Result.error("NBA视频名称不能为空,请重新输入!");
    }
    if (nbaTypes == null) {
        return Result.error("请选择NBA视频类型,再提交!");
    }
    
  • 视频封面格式校验!加逻辑:
    String fileName = file.getOriginalFilename();
    if (!fileName.endsWith(".jpg") && !fileName.endsWith(".png")) {
        return Result.error("仅支持JPG、PNG格式封面,请重新上传!");
    }
    if (file.getSize() > 3 * 1024 * 1024) { // 3MB
        return Result.error("封面大小不能超过3MB,请重新上传!");
    }
    

2. 用户端:NBA视频收藏与留言模块(核心需求!)

用户用系统的核心是“看视频-互动”,流程别复杂:看NBA视频详情→收藏视频/留言,我当初漏了“重复收藏校验”,导致用户能反复收藏同一视频,数据冗余严重,补了半天才好。

(1)关键操作逻辑
  1. 收藏视频前,校验“是否已收藏该视频”(已收藏提示“您已收藏过此NBA视频,无需重复操作”);
  2. 提交留言前,校验“留言内容非空且不超过500字”(内容为空或过长提示“留言内容需1-500字,请重新输入”);
  3. 收藏成功后,同步更新视频点击量(+1),显示“收藏成功!已添加到我的收藏”提示。
(2)页面设计要点(JSP+Bootstrap)

页面标题:用户-NBA视频详情页面
(插入图片位置:此处放“NBA视频详情页面截图”,需包含以下元素)

  • 视频信息区:
    • 视频封面(点击播放视频)、NBA视频名称(加粗大号字体)、视频类型标签(橙色背景)
    • 核心信息:点击量(标蓝显示“点击量:XX次”)、上架状态(绿色“已上架”)
    • 详情文本:NBA视频简介(分段落展示,重点内容标红)
  • 互动操作区:
    • 收藏按钮:星星图标(未收藏灰色/已收藏红色),hover显示“收藏”/“取消收藏”
    • 留言表单:文本域(提示“请输入您的留言,不超过500字”)、“提交留言”按钮(蓝色btn-primary)
  • 留言列表区:
    • 标题:“用户留言”(加粗显示)
    • 留言项:用户头像+昵称+留言内容+留言时间,管理员回复标灰色背景,显示“管理员回复:XXX”
(3)避坑提醒
  • 重复收藏校验!加逻辑:
    LambdaQueryWrapper<NbaCollection> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(NbaCollection::getNbaId, nbaId)
           .eq(NbaCollection::getYonghuId, yonghuId);
    if (collectionService.count(wrapper) > 0) {
        return Result.error("您已收藏过此NBA视频,无需重复操作!");
    }
    // 执行收藏
    NbaCollection collection = new NbaCollection();
    collection.setNbaId(nbaId);
    collection.setYonghuId(yonghuId);
    collection.setInsertTime(new Date());
    collectionService.save(collection);
    // 更新视频点击量
    Nba nba = nbaService.getById(nbaId);
    nba.setNbaClicknum(nba.getNbaClicknum() + 1);
    nbaService.updateById(nba);
    return Result.success("收藏成功!已添加到我的收藏");
    

3. 管理员端:新闻信息管理模块(答辩亮点!)

这个功能能体现“系统内容多样性”,导师超爱问!核心是“发布新闻-修改新闻-删除失效新闻”,别漏“新闻类型管理”,不然新闻分类混乱,用户找不到想看的内容。

页面设计要点(JSP+Bootstrap)

页面标题:管理员-新闻信息管理页面
(插入图片位置:此处放“新闻信息管理页面截图”,需包含以下元素)

  • 筛选区:
    • 输入框:新闻名称(模糊查)
    • 下拉框:新闻类型(全部/行业动态/赛事预告)
    • 按钮:“查询”(蓝色)、“新增新闻”(绿色)
  • 新闻列表区:
    • 表格列名:索引、新闻名称、新闻图片、新闻类型、发布时间、操作
    • 操作按钮:“详情”(蓝色)、“修改”(橙色)、“删除”(红色)
  • 新增新闻弹窗:
    • 表单元素:新闻名称(必填)、新闻类型(下拉框,必填)、新闻图片(上传框,JPG/PNG)、新闻发布时间(日期选择器)、新闻详情(富文本编辑器)
    • 按钮:“提交”(绿色)、“取消”(灰色)
(3)避坑提醒
  • 新闻发布时间校验!加逻辑:
    Date publishTime = news.getInsertTime();
    Date now = new Date();
    if (publishTime.after(now)) {
        return Result.error("新闻发布时间不能晚于当前时间,请重新选择!");
    }
    // 执行新增
    newsService.save(news);
    return Result.success("新闻新增成功!");
    

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

五、测试别敷衍!这3步让答辩不翻车

很多宝子觉得“功能能跑就行”,结果答辩时评委一测就出问题!我当初没测“视频名称重复”场景,导致系统允许重复视频入库,导师说“不符合视频管理逻辑”,当场扣分😫 测试一定要针对性做!

1. 功能测试(必测3个模块)

别全测!重点测“核心功能”,我整理了测试用例表,直接填结果:

(1)NBA视频管理测试(表1:NBA视频测试用例)
测试场景操作步骤预期结果实际结果测试结论
NBA视频名称为空新增NBA视频→名称不填→提交提示“NBA视频名称不能为空,请重新输入!”
上传非JPG/PNG封面新增NBA视频→上传TXT文件当封面→提交提示“仅支持JPG、PNG格式封面,请重新上传!”
正常新增NBA视频填名称+选类型+传JPG封面+传MP4视频→提交提示“新增成功!”,列表显示该视频(上架状态)
(2)NBA视频收藏测试(表2:收藏测试用例)
测试场景操作步骤预期结果实际结果测试结论
重复收藏NBA视频收藏NBA视频ID=1→再次点击收藏按钮提示“您已收藏过此NBA视频,无需重复操作!”
取消收藏NBA视频进入“我的收藏”→选择已收藏视频→点击“取消收藏”提示“取消收藏成功!”,列表移除该视频
正常收藏NBA视频打开NBA视频详情→点击灰色星星图标→提交提示“收藏成功!已添加到我的收藏”
(3)新闻信息管理测试(表3:新闻测试用例)
测试场景操作步骤预期结果实际结果测试结论
新闻发布时间晚于当前时间新增新闻→发布时间选明天→提交提示“新闻发布时间不能晚于当前时间,请重新选择!”
正常新增新闻填名称+选类型+传封面+选今天为发布时间→提交提示“新闻新增成功!”,列表显示该新闻
删除新闻选择新闻→点击“删除”→确认删除提示“删除成功!”,列表移除该新闻

2. 兼容性测试(容易忽略的点)

别只在自己电脑测!答辩时评委可能用不同浏览器,我当初没测IE,结果视频列表表格错乱,赶紧加兼容性CSS才好:

  • 浏览器测试:Chrome、Firefox、Edge、IE11(重点测IE,兼容性最差)
  • 分辨率测试:1920×1080、1366×768(别让页面出现横向滚动条,用Bootstrap的响应式布局,加“overflow-x: hidden”)

3. 测试报告要写好!答辩加分

把测试结果整理成“测试报告”,含“目的、范围、用例、结果、问题总结”,导师会觉得你“做事严谨”。比如:

  • 问题总结:“IE浏览器下视频列表表格错乱,通过添加IE专属CSS(*zoom: 1;)修复;重复收藏未拦截,加收藏记录唯一校验修复”
  • 测试结论:“核心功能(NBA视频管理、视频收藏、新闻管理)均通过测试,无严重bug;兼容性问题已修复,系统可正常使用”

六、答辩准备:3个加分小技巧

毕设不仅要做出来,还要说清楚!我当初准备了这3点,导师直接给“良好”:

  1. 演示流程要顺畅:提前录演示视频(怕现场系统崩),按“管理员新增NBA视频→用户查看并收藏视频→用户留言→管理员回复留言”的流程来,别跳步
  2. 重点讲“你解决了啥问题”:比如“一开始视频名称重复能入库,加唯一约束解决;重复收藏无法拦截,加收藏记录校验修复;表关联错误导致查询失败,重新设计外键解决”,比光说“我用了Java+MySQL”有亮点
  3. 准备常见问题:导师大概率问“为啥选Java不选Python”“数据多了怎么优化”,提前答:“Java稳定性强,适合多媒体平台应用;数据多就加索引(如NBA视频表的nba_types和shangxia_types联合索引),优化查询速度,还能分表存储历史视频数据”

最后:毕设通关的小私心

以上就是基于Java+MySQL的光影视频平台从0到1的避坑干货!毕设没那么难,关键是找对方法,别瞎做复杂功能。

需要核心源码(带注释,直接能跑)、数据库脚本(含测试数据)、ER图模板的宝子,评论区扣“光影视频平台”,我私发你;卡在某个模块(比如视频上传、留言回复),也可以留言,我看到必回!

点赞收藏这篇,下次找流程不迷路~祝宝子们毕设顺利,轻松毕业!😘