温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义随着人们生活水平的不断提高化妆品已成为日常消费的重要组成部分。面对市场上琳琅满目的化妆品品牌和种类消费者往往难以快速准确地选择适合自己的产品。与此同时电商平台的快速发展使得化妆品在线销售规模持续扩大个性化推荐成为提升用户体验和平台转化率的关键手段。本课题基于 Java Spring Boot 框架设计并实现一个化妆品推荐系统旨在通过用户行为数据分析和推荐算法为用户提供个性化的化妆品推荐服务帮助用户在海量商品中快速找到心仪产品同时为平台运营提供数据支撑。2. 系统需求分析2.1 功能需求本系统面向普通用户和管理员两类角色主要功能模块划分如下用户模块用户注册、登录、个人信息管理、浏览历史记录。商品模块化妆品分类展示、商品详情查看、关键词搜索、按品牌/肤质/价格筛选。推荐模块基于用户行为的协同过滤推荐、基于商品属性的内容推荐、热门商品推荐。评价模块用户对已购商品进行评分和评论为推荐算法提供数据基础。管理模块管理员对商品、分类、用户、评论进行后台管理。2.2 非功能需求性能系统响应时间在常规操作下不超过 2 秒推荐接口在数据量较大时具备缓存机制。安全性用户密码加密存储接口权限校验防止 SQL 注入和越权访问。可扩展性推荐算法模块采用策略模式设计便于后续扩展新的推荐策略。易用性前端界面简洁友好操作流程清晰。3. 系统总体设计3.1 系统架构设计系统采用前后端分离的 B/S 架构整体分为表现层、业务逻辑层、数据访问层三层结构表现层使用 Vue.js 或 Thymeleaf 构建用户界面通过 RESTful API 与后端交互。业务逻辑层Spring Boot 负责业务处理包括用户管理、商品管理、推荐引擎等核心逻辑。数据访问层使用 MyBatis-Plus 或 Spring Data JPA 操作 MySQL 数据库Redis 用于缓存热点数据和推荐结果。3.2 技术选型层次技术说明后端框架Spring Boot 2.7快速构建独立运行的微服务应用持久层MyBatis-Plus简化数据库操作内置分页和条件构造器数据库MySQL 8.0存储用户、商品、订单、评价等业务数据缓存Redis缓存热门商品和推荐结果提升响应速度前端Vue.js Element UI构建响应式管理后台和用户端页面推荐算法协同过滤 内容推荐基于用户评分和商品属性实现个性化推荐3.3 数据库设计系统核心数据表包括用户表、商品表、商品分类表、评分表、评论表和浏览记录表。以下为关键表结构设计-- 用户表 CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, nickname VARCHAR(50), skin_type VARCHAR(20) COMMENT 肤质类型, avatar VARCHAR(255), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 商品表 CREATE TABLE product ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, category_id BIGINT NOT NULL, brand VARCHAR(50), price DECIMAL(10,2), skin_type VARCHAR(20) COMMENT 适用肤质, description TEXT, image_url VARCHAR(255), sales_count INT DEFAULT 0, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 评分表 CREATE TABLE rating ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, product_id BIGINT NOT NULL, score INT NOT NULL COMMENT 1-5分, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_user_product (user_id, product_id) );4. 推荐算法设计4.1 基于用户的协同过滤基于用户的协同过滤算法核心思想是找到与当前用户兴趣相似的其他用户将这些相似用户喜欢的商品推荐给当前用户。算法实现步骤如下构建用户-商品评分矩阵评分数据来源于用户对商品的打分和购买行为。使用皮尔逊相关系数或余弦相似度计算用户之间的相似度。选取与目标用户相似度最高的 K 个用户作为最近邻集合。对目标用户未评分的商品进行预测评分按预测分值降序生成推荐列表。4.2 基于商品属性的内容推荐内容推荐算法根据商品的属性特征品牌、分类、适用肤质、价格区间等计算商品之间的相似度为用户推荐与其历史偏好商品相似的其他商品。该算法不依赖其他用户的行为数据适合冷启动场景。4.3 混合推荐策略为弥补单一算法的不足系统采用加权融合的混合推荐策略public class HybridRecommender { private final UserCFRecommender userCF; private final ContentRecommender content; public ListProduct recommend(Long userId, int topN) { // 用户协同过滤推荐结果 ListProduct cfList userCF.recommend(userId, topN); // 内容推荐结果 ListProduct contentList content.recommend(userId, topN); // 加权融合协同过滤权重 0.6内容推荐权重 0.4 return mergeAndRank(cfList, contentList, 0.6, 0.4); } }5. 系统核心功能实现5.1 用户注册与登录用户注册时对密码进行 BCrypt 加密存储登录成功后签发 JWT Token前端在后续请求中携带 Token 完成身份认证。Spring Security 负责接口权限控制。Service public class UserServiceImpl implements UserService { Autowired private UserMapper userMapper; Autowired private PasswordEncoder passwordEncoder; Override public User register(RegisterDTO dto) { // 校验用户名是否已存在 if (userMapper.selectByUsername(dto.getUsername()) ! null) { throw new BusinessException(用户名已存在); } User user new User(); user.setUsername(dto.getUsername()); user.setPassword(passwordEncoder.encode(dto.getPassword())); user.setNickname(dto.getNickname()); user.setSkinType(dto.getSkinType()); userMapper.insert(user); return user; } }5.2 商品推荐接口推荐接口优先从 Redis 缓存读取推荐结果缓存未命中时调用推荐引擎计算并回填缓存以降低算法计算对数据库的压力。RestController RequestMapping(/api/recommend) public class RecommendController { Autowired private RecommendService recommendService; GetMapping(/products) public ResultListProductVO getRecommendProducts( RequestParam Long userId, RequestParam(defaultValue 10) int topN) { ListProductVO list recommendService.getRecommendProducts(userId, topN); return Result.success(list); } }5.3 商品搜索与筛选商品搜索支持按名称模糊查询同时支持按品牌、分类、肤质和价格区间进行组合筛选使用 MyBatis-Plus 条件构造器动态拼接查询条件。public PageProduct searchProducts(ProductQuery query) { LambdaQueryWrapperProduct wrapper new LambdaQueryWrapper(); if (StringUtils.hasText(query.getKeyword())) { wrapper.like(Product::getName, query.getKeyword()); } if (query.getCategoryId() ! null) { wrapper.eq(Product::getCategoryId, query.getCategoryId()); } if (StringUtils.hasText(query.getBrand())) { wrapper.eq(Product::getBrand, query.getBrand()); } if (query.getMinPrice() ! null) { wrapper.ge(Product::getPrice, query.getMinPrice()); } if (query.getMaxPrice() ! null) { wrapper.le(Product::getPrice, query.getMaxPrice()); } return productMapper.selectPage(new Page(query.getPageNum(), query.getPageSize()), wrapper); }6. 系统测试6.1 功能测试对用户注册登录、商品浏览、搜索筛选、评分评论、推荐展示等核心功能进行测试验证各模块功能是否符合需求规格说明。测试结果表明各功能模块运行正常接口返回数据准确。6.2 推荐效果评估采用准确率和召回率两个指标对推荐算法进行评估。在测试数据集上混合推荐策略相比单一协同过滤算法准确率提升了约 12%召回率提升了约 9%验证了混合策略的有效性。7. 总结与展望本文设计并实现了一个基于 Java Spring Boot 的化妆品推荐系统系统采用前后端分离架构实现了用户管理、商品管理、个性化推荐和后台管理等核心功能。推荐模块融合了协同过滤和内容推荐两种算法有效提升了推荐的准确性和多样性。后续可以从以下方向继续优化引入深度学习推荐模型提升推荐精度增加实时行为流处理能力实现秒级反馈的实时推荐完善系统监控和日志分析为运营决策提供更丰富的数据支持。
