1. 项目概述
这个基于SpringBoot+Vue3+MyBatis的个性化电影推荐系统,是我在研究生期间参与开发的一个实战项目。系统采用前后端分离架构,后端使用Java SpringBoot框架,前端采用Vue3组合式API开发,数据库选用MySQL,通过MyBatis实现数据持久化。核心功能是通过分析用户历史行为和电影特征,实现个性化的电影推荐。
提示:在实际开发中发现,采用前后端分离架构时,接口文档的规范性和完整性对开发效率影响很大。建议使用Swagger或YAPI进行接口管理。
系统主要包含以下几个核心模块:
- 用户管理模块:处理用户注册、登录和个人信息维护
- 电影管理模块:管理电影信息和分类标签
- 评分记录模块:记录用户对电影的评分和评论
- 推荐引擎模块:基于协同过滤算法生成个性化推荐
- 后台管理模块:提供数据统计和系统配置功能
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 后端技术栈
后端采用SpringBoot 2.7.x版本,这是目前企业级Java开发的主流框架。选择SpringBoot主要基于以下考虑:
- 自动配置特性大幅减少了XML配置
- 内嵌Tomcat服务器简化了部署流程
- 丰富的starter依赖可以快速集成常用组件
- 完善的生态和社区支持
数据访问层使用MyBatis-Plus 3.5.x,相比原生MyBatis,它提供了更多开箱即用的功能:
- 通用Mapper减少重复CRUD代码
- 强大的条件构造器简化复杂查询
- 分页插件支持多种数据库
- 性能分析插件帮助优化SQL
2.2 前端技术栈
前端选用Vue3 + TypeScript的组合,主要优势包括:
- Composition API使代码组织更灵活
- 更好的TypeScript支持
- 更小的打包体积和更高的运行效率
- 更灵活的逻辑复用方式
UI组件库使用Element Plus,这是对Vue3支持最好的企业级组件库之一。同时引入ECharts实现数据可视化,展示用户行为和推荐效果统计。
2.3 数据库设计
MySQL 8.0作为关系型数据库,存储结构化数据。三个核心表的设计如下:
2.3.1 用户表(user)
sql复制CREATE TABLE `user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
`password_hash` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`email` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`register_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_login` datetime DEFAULT NULL,
`interest_tags` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`user_id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2.3.2 电影表(movie)
sql复制CREATE TABLE `movie` (
`movie_id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`director` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`release_year` int DEFAULT NULL,
`genre` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
`description` text COLLATE utf8mb4_general_ci,
`avg_rating` float DEFAULT '0',
`poster_url` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
PRIMARY KEY (`movie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2.3.3 评分表(rating)
sql复制CREATE TABLE `rating` (
`rating_id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`movie_id` bigint NOT NULL,
`rating_score` float NOT NULL,
`rating_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`feedback_comment` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`rating_id`),
KEY `user_id` (`user_id`),
KEY `movie_id` (`movie_id`),
CONSTRAINT `rating_ibfk_1` FOREIGN KEY (`user
