1. 项目概述与背景
作为一名游戏爱好者和Java开发者,我注意到游戏周边市场近年来呈现爆发式增长。从手办、服饰到数码配件,玩家们愿意为喜爱的游戏IP买单,但市面上缺乏专业的垂直电商平台。这正是我选择开发游戏周边商城系统作为毕业设计的原因。
这个基于SpringBoot的电商平台采用前后端分离架构,前端使用Vue.js,后端采用SpringBoot框架,数据库选用MySQL。系统实现了完整的电商功能链路,包括用户管理、商品展示、购物车、订单处理、支付模拟等核心模块。特别针对游戏周边商品的特点,设计了IP分类展示、收藏互动、资讯社区等特色功能。
提示:选择SpringBoot+Vue的技术栈主要考虑到开发效率和学习成本。SpringBoot的自动配置特性可以快速搭建后端服务,而Vue的组件化开发模式非常适合电商类前端界面。
2. 系统架构设计
2.1 技术选型分析
后端技术栈:
- SpringBoot 2.7.x:简化配置,内置Tomcat,快速构建RESTful API
- Spring Security:处理用户认证和授权
- MyBatis-Plus:简化数据库操作,提供CRUD增强功能
- Redis:缓存热点数据,如商品信息、用户会话
- RabbitMQ:异步处理订单创建、库存扣减等高延迟操作
前端技术栈:
- Vue 3:组合式API开发,更好的TypeScript支持
- Element Plus:提供丰富的UI组件
- Axios:处理HTTP请求
- Vue Router:前端路由管理
- Pinia:状态管理库替代Vuex
数据库设计:
CREATE TABLE `product` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL COMMENT '商品名称', `category_id` bigint NOT NULL COMMENT '分类ID', `price` decimal(10,2) NOT NULL COMMENT '售价', `stock` int NOT NULL DEFAULT '0' COMMENT '库存', `ip_id` bigint DEFAULT NULL COMMENT '关联游戏IP', `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-上架 0-下架', PRIMARY KEY (`id`), KEY `idx_category` (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;2.2 核心功能模块设计
2.2.1 用户系统
- 采用JWT进行无状态认证
- 密码使用BCrypt加密存储
- 实现第三方登录(微信、QQ)集成
- 用户行为分析模块记录浏览、收藏等数据
2.2.2 商品系统
- 多级分类管理(手办、服饰、数码等)
- 商品与游戏IP关联展示
- 支持多规格商品(如T恤的不同颜色、尺寸)
- 商品搜索采用Elasticsearch实现
2.2.3 订单系统
@Transactional public Order createOrder(OrderDTO orderDTO) { // 1. 校验库存 List<OrderItem> items = checkStock(orderDTO); // 2. 扣减库存 reduceStock(items); // 3. 生成订单 Order order = buildOrder(orderDTO, items); orderMapper.insert(order); // 4. 发送延迟消息检查支付状态 rabbitTemplate.convertAndSend( "order.delay.exchange", "order.delay.routingkey", order.getId(), message -> { message.getMessageProperties().setDelay(30 * 60 * 1000); // 30分钟 return message; } ); return order; }3. 关键实现细节
3.1 购物车设计
购物车采用混合存储策略:
- 未登录用户:存储在浏览器localStorage
- 已登录用户:同步到服务端Redis
购物车数据结构示例:
{ "userId": 123, "items": [ { "productId": 456, "skuId": 789, "quantity": 2, "selected": true, "price": 199.00, "image": "https://example.com/image.jpg" } ] }3.2 支付流程实现
虽然毕业设计只需模拟支付,但我仍按照真实场景实现:
- 创建支付订单
- 生成支付参数(模拟返回支付URL)
- 轮询查询支付状态
- 支付成功回调处理
支付状态机设计:
[待支付] --支付成功--> [已支付] --发货--> [已发货] \ \ \--取消订单--> [已取消] \--确认收货--> [已完成]3.3 商品搜索优化
对于游戏周边商品,搜索需要特殊处理:
- 建立商品名称、IP名称、标签的倒排索引
- 支持拼音搜索(如输入"lol"可匹配"英雄联盟")
- 热度加权(收藏量、销量影响排序)
Elasticsearch映射示例:
{ "mappings": { "properties": { "name": { "type": "text", "analyzer": "ik_max_word" }, "ip_name": { "type": "keyword" }, "tags": { "type": "keyword" }, "sales": { "type": "integer" }, "price": { "type": "double" } } } }4. 开发经验与避坑指南
4.1 事务处理要点
在电商系统中,事务管理尤为重要。我遇到的主要问题:
- 库存超卖问题:
// 错误做法:先查询再更新会导致并发问题 int stock = product.getStock(); if(stock >= quantity) { product.setStock(stock - quantity); productMapper.updateById(product); } // 正确做法:使用乐观锁或直接原子操作 productMapper.reduceStock(productId, quantity);对应的SQL:
UPDATE product SET stock = stock - #{quantity} WHERE id = #{productId} AND stock >= #{quantity}- 分布式事务:
- 订单创建涉及多个服务(订单、库存、优惠券)
- 最终采用本地消息表+定时任务补偿机制
4.2 性能优化实践
- 缓存策略:
- 商品详情:Redis缓存 + 本地缓存二级架构
- 采用多级过期策略:基础信息长期缓存,库存信息短期缓存
- 使用BloomFilter防止缓存穿透
- 接口优化:
- 商品列表接口采用分页+懒加载
- 复杂查询走Elasticsearch
- 使用GraphQL按需获取字段
4.3 安全防护措施
- 常见Web安全防护:
- XSS:前端使用DOMPurify净化,后端统一过滤
- CSRF:Spring Security默认防护
- SQL注入:MyBatis使用预编译
- 业务安全:
- 短信验证码限流(Redis实现)
- 敏感操作二次验证
- 订单金额服务端校验
5. 部署与监控
5.1 容器化部署
采用Docker Compose编排:
version: '3' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql redis: image: redis:6 ports: - "6379:6379" volumes: - ./redis/data:/data app: build: . ports: - "8080:8080" depends_on: - mysql - redis5.2 监控方案
- Spring Boot Actuator:暴露健康检查端点
- Prometheus + Grafana:监控系统指标
- ELK:日志收集与分析
- SkyWalking:分布式链路追踪
6. 项目总结与扩展方向
这个毕业设计项目让我深入理解了电商系统的核心架构和实现细节。在开发过程中,最大的收获是学会了如何平衡功能完整性和开发效率。
几个值得继续优化的方向:
- 引入推荐算法,基于用户行为推荐商品
- 实现AR试穿/预览功能增强体验
- 搭建商家入驻平台,支持多店铺运营
- 开发移动端APP(Flutter跨平台方案)
对于初学者,我的建议是从最小可行产品(MVP)开始,先实现核心购物流程,再逐步扩展其他功能模块。SpringBoot和Vue的生态非常丰富,遇到问题多查阅官方文档和社区讨论。