返回作品

电影评论网站

创建于 2025 年 6 月 1 日

标签
  • Spring Boot
  • MyBatis
  • MySQL
  • PageHelper
  • Hutool
  • Vue 3
  • Element Plus

项目介绍

难言之影(painful-movie)是一个仿照豆瓣电影设计理念制作的电影评论网站,采用 Spring Boot + Vue 3 的前后端分离架构。项目暂未挂载云服务器,通过内置 Tomcat 在本地运行:后端服务监听 9090 端口,前端 Vue 工程独立开发,前后端通过 REST 接口通信。

数据模型围绕”电影—评论—用户”三角关系设计:film 表承载电影详情(名称、海报、简介、导演、演员、分类、国家、语言、上映日期、时长、IMDb 编号),comment 表记录用户对某部电影的评分与文字评论,user / admin 表分别对应普通用户与管理员,另有 category(电影分类)与 notice(公告)两张辅助表,共同支撑一个完整的影评社区业务闭环。

核心功能

  • 电影信息管理Film 实体包含 13 个业务字段,管理端可增删改查;FilmMapper.xmlselectAll 通过 left join category 联表带出分类名,并用 <where> + <if> 动态 SQL 实现按电影名模糊匹配(like concat('%', #{name}, '%'))与按分类精确过滤。
  • 评论与评分聚合:评论支持评分(score)与文字内容,type 字段区分短评、长评两种形态;列表查询 left join filmleft join user 联表带出电影名与用户名,可按电影、用户、类型组合筛选。评分由 FilmService.setScore() 实时计算——selectTotal 统计评论条数、selectSum 累加总分,再用 BigDecimal 四舍五入保留一位小数得到平均分,无评论时评分为 0。
  • 排行榜与随机推荐selectRanking 对全部电影逐一计算平均分后按分数降序取前五,驱动首页排行榜;selectRecommend 先从全量电影中排除当前详情页电影,再 Collections.shuffle 打乱顺序取 3 部作为随机推荐。
  • 双角色登录与安全WebController/login 根据请求中的 role 字段将登录分发给 AdminServiceUserService,密码错误、用户不存在均抛出业务异常;同时提供注册与修改密码接口(校验原密码)。
  • 管理后台与文件上传:管理员可维护电影分类、发布公告、管理用户与评论;FileController 支持海报等图片上传,以”时间戳-原文件名”命名落盘到本地 files/ 目录,通过 /files/download/{fileName} 对外提供访问,单文件限制 100MB。

功能截图

暂无运行截图。