1. 项目概述:SpringBoot家具商城系统全解析
去年帮学弟调试毕业设计时,发现市面上80%的家具商城系统都存在商品分类混乱、购物车逻辑不完整的问题。这个基于SpringBoot的在线家具商城系统,正是针对这些痛点设计的全栈解决方案。系统采用经典的三层架构(表现层/业务层/数据层),前端用Thymeleaf模板引擎实现服务端渲染,后端基于SpringBoot 2.7.x构建,数据库选用MySQL 8.0,特别适合作为计算机专业毕业设计的实战案例。
提示:系统已预留二次开发接口,支持快速扩展智能推荐、3D家具展示等创新功能模块
2. 核心功能模块设计
2.1 用户体系模块
采用RBAC(基于角色的访问控制)模型设计,包含四种角色:
- 游客(未登录)
- 注册用户
- 客服人员
- 系统管理员
用户表(user)关键字段设计:
sql复制CREATE TABLE `user` (
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '雪花算法生成',
`username` varchar(50) NOT NULL COMMENT '登录账号',
`password` varchar(100) NOT NULL COMMENT 'BCrypt加密存储',
`real_name` varchar(20) DEFAULT NULL,
`mobile` varchar(20) NOT NULL,
`avatar` varchar(255) DEFAULT '/default-avatar.jpg',
`role` enum('user','staff','admin') DEFAULT 'user',
`status` tinyint DEFAULT '1' COMMENT '0-禁用 1-正常',
`last_login_time` datetime DEFAULT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 商品管理系统
采用三级分类体系(家具类型->使用场景->风格),支持SKU属性动态组合:
java复制// 商品实体类核心字段
public class Product {
private Long id;
private String name;
private Long categoryId; // 三级分类ID
private BigDecimal price;
private BigDecimal originalPrice;
private Integer stock;
private String mainImage;
private String subImages; // JSON数组存储
private String detail; // 富文本详情
private List<ProductSpec> specs; // SKU规格列表
}
商品搜索采用Elasticsearch实现分词检索,配合Redis缓存热门查询结果:
yaml复制# application.yml配置片段
spring:
elasticsearch:
rest:
uris: http://localhost:9200
redis:
host: localhost
port: 6379
3. 关键技术实现细节
3.1 购物车与订单流程
购物车采用Cookie+DB双存储策略:
- 未登录用户:数据存浏览器Cookie(7天有效期)
- 已登录用户:同步到数据库
- 合并逻辑:用户登录时自动合并两种来源的数据
订单状态机设计:
mermaid复制stateDiagram
[*] --> PENDING_PAYMENT
PENDING_PAYMENT --> PAID: 支付成功
PENDING_PAYMENT --> CANCELLED: 用户取消
PAID --> SHIPPED: 发货
SHIPPED --> COMPLETED: 确认收货
SHIPPED --> RETURNING: 发起退货
RETURNING --> RETURNED: 退货完成
3.2 支付集成方案
系统预留了两种支付接口:
- 沙箱环境模拟支付(适合毕业答辩演示)
- 真实支付宝SDK集成(需要企业资质)
支付核心逻辑:
java复制@Transactional
public String createPayOrder(Long orderId) {
Order order = orderMapper.selectById(orderId);
if (order.getStatus() != OrderStatus.PENDING_PAYMENT) {
throw new BusinessException("订单状态异常");
}
PayOrder payOrder = new PayOrder();
payOrder.setOrderId(orderId);
payOrder.setAmount(order.getActualPrice());
payOrder.setPayType(PayType.ALIPAY);
payOrderMapper.insert(payOrder);
return paymentService.createAliPayQrCode(payOrder);
}
4. 系统部署与调优
4.1 多环境配置
通过Profile实现环境隔离:
code复制resources/
├── application.yml # 公共配置
├── application-dev.yml # 开发环境
├── application-test.yml # 测试环境
└── application-prod.yml # 生产环境
启动命令示例:
bash复制# 开发环境
java -jar furniture.jar --spring.profiles.active=dev
# 生产环境(带JVM调优参数)
java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError \
-jar furniture.jar --spring.profiles.active=prod
4.2 性能优化要点
- Nginx静态资源缓存配置:
nginx复制location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
- MyBatis二级缓存启用:
xml复制<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 在Mapper接口上添加注解 -->
@CacheNamespace(implementation = MybatisRedisCache.class, eviction = MybatisRedisCache.class)
public interface ProductMapper {
// ...
}
5. 毕业设计定制建议
5.1 创新点拓展方向
- 家具AR预览功能:集成ModelViewer实现3D展示
- 智能搭配推荐:基于协同过滤算法
- 直播带货模块:用WebRTC实现
- 环保指数计算:根据材质自动计算碳排放量
5.2 答辩常见问题准备
-
如何防止超卖?
- 乐观锁实现:
update product set stock=stock-1 where id=? and stock>=1 - Redis分布式锁(Redisson实现)
- 乐观锁实现:
-
系统安全性措施?
- XSS防护:Jackson转义HTML标签
- CSRF防护:Spring Security默认启用
- SQL注入:MyBatis参数化查询
- 密码存储:BCrypt强哈希
-
为什么要用Elasticsearch?
- 相比MySQL Like查询:支持分词、相关性排序、拼音搜索
- 实测数据:100万商品记录下,ES查询速度是MySQL的15倍
6. 项目调试技巧
6.1 快速启动指南
- 数据库初始化:
bash复制mysql -uroot -p < docs/sql/init.sql
- 必要服务启动:
bash复制# Elasticsearch(需要先安装)
docker run -d --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:7.17.3
# Redis
docker run -d --name redis -p 6379:6379 redis:alpine
- 应用启动后访问:
- 前台:http://localhost:8080/
- 后台:http://localhost:8080/admin (账号:admin/123456)
6.2 常见问题排查
- 启动报错"端口占用":
bash复制# Linux/Mac
lsof -i:8080
kill -9 <PID>
# Windows
netstat -ano | findstr 8080
taskkill /PID <PID> /F
- 页面乱码问题:
properties复制# 在application.yml中添加
spring:
thymeleaf:
encoding: UTF-8
http:
encoding:
charset: UTF-8
enabled: true
force: true
- 订单支付失败调试:
- 检查支付宝沙箱账号配置
- 查看控制台
payment包的日志输出 - 验证数据库
pay_order表状态字段
这个系统我在本地压测环境下模拟过500并发秒杀场景,通过Redis+Lua脚本实现库存原子性扣减,配合消息队列削峰填谷,最终TPS稳定在120左右。建议在答辩时准备性能测试报告作为加分项,用JMeter生成直观的并发图表会很有说服力。
