返回作品
电影评论网站
创建于 2025 年 6 月 1 日
项目介绍
难言之影(painful-movie)是一个仿照豆瓣电影设计理念制作的电影评论网站,采用 Spring Boot + Vue 3 的前后端分离架构。项目暂未挂载云服务器,通过内置 Tomcat 在本地运行:后端服务监听 9090 端口,前端 Vue 工程独立开发,前后端通过 REST 接口通信。
数据模型围绕”电影—评论—用户”三角关系设计:film 表承载电影详情(名称、海报、简介、导演、演员、分类、国家、语言、上映日期、时长、IMDb 编号),comment 表记录用户对某部电影的评分与文字评论,user / admin 表分别对应普通用户与管理员,另有 category(电影分类)与 notice(公告)两张辅助表,共同支撑一个完整的影评社区业务闭环。
核心功能
- 电影信息管理:
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。
功能截图
暂无运行截图。