1. 项目概述
这个基于SpringBoot的线上化妆品销售系统是我在毕业设计期间完成的一个完整电商项目。作为一个全栈开发实践,系统采用了当前主流的技术栈:后端使用SpringBoot框架,前端基于Vue.js,数据库选用MySQL,实现了从商品展示、购物车管理到订单处理的全流程功能。
系统最核心的价值在于:
- 为消费者提供了便捷的化妆品选购平台,支持商品搜索、分类筛选、详情查看、购物车管理等标准电商功能
- 为管理员提供了完整的后台管理系统,包括商品管理、订单处理、数据统计等核心运营功能
- 采用前后端分离架构,保证了系统的可维护性和扩展性
技术选型思考:选择SpringBoot+Vue的组合主要考虑到技术成熟度、社区支持以及个人技术栈的匹配度。这种组合既能满足毕业设计的技术要求,也符合企业级开发的实际情况。
2. 系统架构设计
2.1 技术架构
系统采用典型的前后端分离架构:
code复制前端层(Vue.js)
│
├── 用户界面
├── 管理员界面
│
API层(SpringBoot)
│
├── 控制器层(Controller)
├── 服务层(Service)
├── 数据访问层(DAO)
│
数据存储层(MySQL)
这种分层架构的主要优势在于:
- 前后端可以并行开发,提高开发效率
- 接口定义清晰,便于团队协作
- 各层职责明确,便于维护和扩展
2.2 数据库设计
数据库设计遵循了第三范式,主要包含以下几类表:
- 用户相关表:user(用户基础信息)、user_group(用户分组)、address(收货地址)
- 商品相关表:goods(商品信息)、goods_type(商品分类)
- 订单相关表:order(订单主表)、order_after_sale(售后订单)
- 内容管理表:article(文章)、article_type(文章分类)
- 系统管理表:auth(权限管理)、slides(轮播图)
数据库设计心得:在商品表设计中,我特别添加了多张主图字段(img_1到img_5),这是电商系统的常见做法,可以展示商品的多角度细节,提升转化率。
3. 核心功能实现
3.1 用户模块
3.1.1 注册登录
采用标准的手机号/邮箱+密码的注册方式,后端使用Spring Security进行认证和授权。密码存储采用BCrypt加密算法,这是目前最推荐的密码存储方式。
关键代码片段:
java复制// 密码加密处理
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
// 注册逻辑
public User register(User user) {
if(userRepository.existsByUsername(user.getUsername())) {
throw new RuntimeException("用户名已存在");
}
user.setPassword(passwordEncoder.encode(user.getPassword()));
return userRepository.save(user);
}
3.1.2 商品浏览
商品列表页实现了:
- 分页查询
- 多条件筛选(按分类、价格区间等)
- 排序功能(按销量、价格、上架时间等)
前端采用Vue的axios调用后端RESTful API获取数据,使用Element UI的表格和分页组件展示。
3.2 购物流程
3.2.1 购物车管理
购物车功能要点:
- 未登录用户可以使用临时购物车(基于session)
- 登录后自动合并临时购物车到用户购物车
- 支持商品数量修改、删除等操作
购物车表设计关键字段:
sql复制CREATE TABLE `cart` (
`cart_id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`goods_id` mediumint NOT NULL,
`num` int NOT NULL DEFAULT '1',
`price` double NOT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`cart_id`),
KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2.2 订单处理
订单状态机设计:
code复制待付款 → 已取消
待付款 → 已付款 → 待发货 → 已发货 → 已签收 → 已完成
↘ 退款中 → 已退款
关键业务逻辑:
- 下单时检查库存(避免超卖)
- 支付超时自动取消(30分钟未支付)
- 支持订单拆分(不同商家的商品生成不同订单)
3.3 后台管理
3.3.1 商品管理
实现了完整的CRUD功能,特别处理了:
- 商品图片上传(支持多图)
- 富文本编辑(商品详情)
- SKU管理(颜色、规格等)
开发踩坑记录:最初没有考虑商品上下架状态,导致已下架商品仍能被搜索到。后来增加了status字段和相应的过滤逻辑。
3.3.2 订单管理
管理员可以:
- 查看所有订单
- 处理退款申请
- 导出订单数据(Excel格式)
- 查看销售统计报表
4. 关键技术实现
4.1 前后端分离实践
采用Vue.js作为前端框架,通过axios与后端交互。为了解决跨域问题,后端添加了CORS配置:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.maxAge(3600);
}
}
接口设计遵循RESTful规范,例如:
- GET /api/goods - 获取商品列表
- POST /api/orders - 创建订单
- PUT /api/users/{id} - 更新用户信息
4.2 数据库优化
- 索引优化:在常用查询字段上创建索引,如user表的username、goods表的type等
- 连接池配置:使用HikariCP连接池,配置合理的连接数
- 慢查询监控:开启MySQL慢查询日志,优化执行时间超过500ms的SQL
properties复制# application.properties
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000
4.3 缓存应用
对于高频访问但更新不频繁的数据使用Redis缓存,如:
- 商品分类信息
- 首页轮播图
- 热门商品列表
缓存更新策略:
- 查询时先查缓存,缓存不存在再查数据库
- 数据更新时同步更新缓存
- 设置合理的过期时间(如5分钟)
5. 系统测试与优化
5.1 功能测试
使用Postman对主要API进行了全面测试,覆盖:
- 正常流程测试
- 边界条件测试
- 异常情况测试
例如测试用户登录:
- 正确用户名密码 - 应返回token
- 错误密码 - 应返回错误提示
- 不存在的用户名 - 应返回错误提示
- 空用户名或密码 - 应返回参数错误
5.2 性能测试
使用JMeter模拟并发用户,测试结果:
- 商品列表页:100并发下平均响应时间<500ms
- 订单提交:50并发下平均响应时间<800ms
- 用户登录:200并发下平均响应时间<1s
发现的问题及解决方案:
- 商品搜索较慢 → 添加商品名称的全文索引
- 订单列表分页查询慢 → 优化SQL,添加适当索引
5.3 安全措施
- SQL注入防护:全部使用预编译语句
- XSS防护:前端过滤特殊字符,后端再次校验
- CSRF防护:使用Spring Security的CSRF保护
- 敏感数据加密:用户密码、支付信息等加密存储
6. 部署方案
系统采用Docker容器化部署,包含以下服务:
- 前端服务(Nginx+Vue静态文件)
- 后端服务(SpringBoot应用)
- 数据库服务(MySQL)
- 缓存服务(Redis)
使用docker-compose编排:
yaml复制version: '3'
services:
frontend:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: cosmetics
volumes:
- ./mysql-data:/var/lib/mysql
redis:
image: redis:alpine
7. 开发经验总结
- 接口设计:前期花时间设计好API接口规范,能大幅减少后期的沟通和修改成本
- 异常处理:统一的异常处理机制非常重要,我实现了全局异常处理器,返回标准化的错误信息
- 日志记录:完善的日志记录(尤其是业务关键点)对排查问题非常有帮助
- 代码规范:坚持一致的代码风格和命名规范,使用Checkstyle等工具进行检查
项目改进方向:
- 引入消息队列(如RabbitMQ)处理高并发下的订单创建
- 实现分布式会话管理,支持多节点部署
- 增加更多的数据分析功能,如用户行为分析、销售预测等
这个项目让我对电商系统的全栈开发有了深入理解,特别是在高并发处理、数据一致性保障等方面积累了很多实践经验。虽然作为毕业设计已经达到了基本要求,但还有很多可以优化和扩展的空间。