电影评论网站
创建于 2025 年 6 月 1 日
项目介绍
难言之影(painful-movie)是一个仿照豆瓣电影设计理念制作的电影评论网站,采用 Spring Boot + Vue 3 的前后端分离架构。项目暂未挂载云服务器,通过内置 Tomcat 在本地运行:后端服务监听 9090 端口,前端 Vue 工程独立开发,前后端通过 REST 接口通信。
数据模型围绕”电影—评论—用户”三角关系设计:film 表承载电影详情(名称、海报、简介、导演、演员、分类、国家、语言、上映日期、时长、IMDb 编号),comment 表记录用户对某部电影的评分与文字评论,user / admin 表分别对应普通用户与管理员,另有 category(电影分类)与 notice(公告)两张辅助表,共同支撑一个完整的影评社区业务闭环。
项目架构
后端采用经典的 Controller-Service-Mapper 三层结构:8 个 @RestController(Film、Comment、User、Admin、Category、Notice、File、Web)暴露接口,Service 层承载业务逻辑,Mapper 层基于 MyBatis XML 映射与数据库交互,配合 PageHelper 实现分页查询。统一返回 Result 包装体,异常由 GlobalExceptionHandler 与自定义 CustomException 统一兜底,Hutool 提供日期与文件处理等工具能力。数据库为 MySQL(库名 film_comment_system),application.yml 开启了下划线转驼峰映射,前端上传的图片存储在本地 files/ 目录。
前端为 Vue 3 单页应用,基于 Vue Router 组织路由:/login、/register 为认证页,Manager.vue 作为主框架承载后台管理页(电影、评论、用户、分类、公告、个人中心等子页面),配合 Element Plus 组件库完成表格、表单与弹窗交互。
核心功能
- 电影信息管理:
Film实体包含 13 个业务字段,管理端可增删改查;FilmMapper.xml中selectAll通过left join category联表带出分类名,并用<where>+<if>动态 SQL 实现按电影名模糊匹配(like concat('%', #{name}, '%'))与按分类精确过滤。 - 评论与评分聚合:评论支持评分(score)与文字内容,
type字段区分短评、长评两种形态;列表查询left join film、left join user联表带出电影名与用户名,可按电影、用户、类型组合筛选。评分由FilmService.setScore()实时计算——selectTotal统计评论条数、selectSum累加总分,再用BigDecimal四舍五入保留一位小数得到平均分,无评论时评分为 0。 - 排行榜与随机推荐:
selectRanking对全部电影逐一计算平均分后按分数降序取前五,驱动首页排行榜;selectRecommend先从全量电影中排除当前详情页电影,再Collections.shuffle打乱顺序取 3 部作为随机推荐。 - 双角色登录与安全:
WebController的/login根据请求中的role字段将登录分发给AdminService或UserService,密码错误、用户不存在均抛出业务异常;同时提供注册与修改密码接口(校验原密码)。 - 管理后台与文件上传:管理员可维护电影分类、发布公告、管理用户与评论;
FileController支持海报等图片上传,以”时间戳-原文件名”命名落盘到本地files/目录,通过/files/download/{fileName}对外提供访问,单文件限制 100MB。
功能截图
暂无运行截图。
快速上手
项目由 springboot 后端工程与 vue 前端工程组成。后端需要本机 MySQL(默认账号 root/root),按 application.yml 中的连接串创建 film_comment_system 数据库并初始化表结构后,通过 Maven 启动 Spring Boot 服务(端口 9090);前端在 vue 目录执行 npm install 与 npm run dev 即可访问系统。上传的图片会写入后端工程根目录的 files/ 文件夹,可通过 fileBaseUrl 配置调整访问前缀。
总结
难言之影把影评社区最核心的”看电影、打分、写评论、看排行”流程完整落地:评分不是手动维护的静态字段,而是由评论实时聚合而来,数据自洽;排行榜与随机推荐让首页有了内容活力;USER/ADMIN 双角色的登录分发与完整管理后台则补齐了内容治理能力。项目结构清晰、分层规范,MyBatis 动态 SQL 与联表查询、PageHelper 分页、Hutool 工具集的使用都是日常后端开发的典型范式,适合作为学习 Spring Boot + Vue 全栈开发与影评类业务建模的参考案例。