一、项目背景与意义随着互联网技术的飞速发展和消费升级线上购物已成为人们日常生活的重要组成部分。美妆行业作为电商领域的重要分支市场规模持续扩大消费者对购物体验、产品信息透明度和个性化服务提出了更高要求。传统美妆零售模式受限于地域、时间和信息不对称难以满足现代消费者的多元化需求。本项目旨在设计并实现一个基于Spring Boot的美妆商城系统其核心意义在于技术实践价值整合Spring Boot、MyBatis、Redis、MySQL等主流技术栈构建一个高可用、易维护的现代化电商平台为开发者提供一个完整的企业级项目实践案例。商业应用价值为美妆品牌或零售商提供一个功能完备的线上销售渠道涵盖商品展示、用户管理、购物车、订单处理、支付集成等核心电商功能助力业务数字化转型。学习参考价值系统展示了从需求分析、数据库设计、后端API开发到前端交互的全流程对学习Java Web开发、微服务架构和电商系统设计具有重要的参考意义。二、技术栈选型本项目采用前后端分离架构后端基于Spring Boot构建前端可选择Vue.js或Thymeleaf模板引擎。以下是核心技术栈1. 后端技术栈核心框架Spring Boot 2.7.x提供快速启动和自动配置Web框架Spring MVC数据持久层MyBatis-Plus增强CRUD操作简化SQL编写数据库MySQL 8.0关系型数据库存储商品、用户、订单等核心数据缓存Redis用于会话管理、热点数据缓存、购物车临时存储安全框架Spring Security JWT实现用户认证与授权接口文档Swagger2 / Knife4j自动生成和测试API文档项目管理Maven其他Lombok简化实体类代码Hutool工具库Logback日志2. 前端技术栈示例框架Vue 3 Element Plus构建管理后台构建工具ViteHTTP客户端Axios状态管理Vuex / Pinia可选3. 开发与部署版本控制Git容器化Docker可选用于环境隔离与部署部署Linux服务器Nginx反向代理Jenkins持续集成可选三、系统核心功能模块设计系统主要分为前台用户端和后台管理端。1. 前台用户端用户模块注册、登录含手机验证码、个人信息管理、收货地址管理。商品模块商品分类浏览、搜索关键词、分类、品牌、商品详情展示轮播图、参数、评价。购物车模块添加商品、修改数量、删除商品、批量选择结算。订单模块生成订单、订单列表查看、订单状态跟踪、取消订单、确认收货。支付模块集成支付宝/微信支付沙箱模拟支付流程。评价模块已购商品评价、晒图。2. 后台管理端管理员权限RBAC模型不同角色分配不同菜单与操作权限。商品管理商品分类、品牌、规格参数的CRUD商品上下架库存管理。订单管理订单列表查询、订单详情、发货、退款审核。用户管理用户列表、禁用/启用账户。内容管理首页轮播图、公告管理。数据统计销售数据概览图表展示。四、核心代码实现示例1. 商品分页查询接口Controller层RestController RequestMapping(/api/product) Api(tags 商品管理) public class ProductController { Autowired private ProductService productService; GetMapping(/list) ApiOperation(分页查询商品列表) public ResultPageProductVO getProductPage( RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize, RequestParam(required false) String keyword, RequestParam(required false) Long categoryId) { PageProduct page new Page(pageNum, pageSize); LambdaQueryWrapperProduct queryWrapper new LambdaQueryWrapper(); queryWrapper.like(StringUtils.isNotBlank(keyword), Product::getName, keyword) .eq(categoryId ! null, Product::getCategoryId, categoryId) .eq(Product::getStatus, 1); // 只查询上架商品 PageProduct productPage productService.page(page, queryWrapper); // 转换为VO可能包含更多前端需要的字段 PageProductVO voPage productPage.convert(product - { ProductVO vo new ProductVO(); BeanUtils.copyProperties(product, vo); // 补充其他信息如分类名称、品牌名称等 return vo; }); return Result.success(voPage); } }2. 购物车添加商品Service层Service Slf4j public class CartServiceImpl implements CartService { Autowired private RedisTemplateString, Object redisTemplate; private static final String CART_KEY_PREFIX cart:user:; Override public boolean addToCart(Long userId, CartItemDTO cartItemDTO) { // 1. 参数校验 if (userId null || cartItemDTO null || cartItemDTO.getProductId() null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } // 2. 验证商品是否存在及库存 Product product productService.getById(cartItemDTO.getProductId()); if (product null || product.getStatus() ! 1) { throw new BusinessException(ErrorCode.PRODUCT_NOT_EXIST); } if (cartItemDTO.getQuantity() 0) { cartItemDTO.setQuantity(1); } String cartKey CART_KEY_PREFIX userId; // 3. 从Redis获取当前用户的购物车 MapObject, Object cartMap redisTemplate.opsForHash().entries(cartKey); CartItem cartItem; String productKey String.valueOf(cartItemDTO.getProductId()); if (cartMap.containsKey(productKey)) { // 4. 如果商品已存在合并数量 cartItem (CartItem) cartMap.get(productKey); cartItem.setQuantity(cartItem.getQuantity() cartItemDTO.getQuantity()); } else { // 5. 新增商品项 cartItem new CartItem(); BeanUtils.copyProperties(cartItemDTO, cartItem); cartItem.setProductName(product.getName()); cartItem.setProductImage(product.getMainImage()); cartItem.setPrice(product.getPrice()); } // 6. 写回Redis redisTemplate.opsForHash().put(cartKey, productKey, cartItem); // 设置购物车Key过期时间例如7天 redisTemplate.expire(cartKey, 7, TimeUnit.DAYS); log.info(用户 {} 添加商品 {} 到购物车数量 {}, userId, cartItemDTO.getProductId(), cartItem.getQuantity()); return true; } }3. 订单生成与库存扣减事务管理Service Transactional(rollbackFor Exception.class) public class OrderServiceImpl implements OrderService { Autowired private OrderMapper orderMapper; Autowired private OrderItemMapper orderItemMapper; Autowired private ProductService productService; Override public String createOrder(OrderCreateDTO orderCreateDTO, Long userId) { // 1. 参数校验收货地址、商品清单等 // 2. 验证商品库存使用悲观锁或乐观锁防止超卖 ListOrderItem orderItems new ArrayList(); BigDecimal totalAmount BigDecimal.ZERO; for (OrderItemDTO itemDTO : orderCreateDTO.getItems()) { Product product productService.getProductForUpdate(itemDTO.getProductId()); // 加锁查询 if (product.getStock() itemDTO.getQuantity()) { throw new BusinessException(ErrorCode.PRODUCT_STOCK_NOT_ENOUGH); } // 扣减库存 productService.reduceStock(itemDTO.getProductId(), itemDTO.getQuantity()); OrderItem orderItem new OrderItem(); BeanUtils.copyProperties(itemDTO, orderItem); orderItem.setProductName(product.getName()); orderItem.setProductImage(product.getMainImage()); orderItem.setCurrentPrice(product.getPrice()); BigDecimal itemTotal product.getPrice().multiply(new BigDecimal(itemDTO.getQuantity())); orderItem.setTotalPrice(itemTotal); orderItems.add(orderItem); totalAmount totalAmount.add(itemTotal); } // 3. 生成订单主信息 Order order new Order(); order.setOrderNo(IdUtil.getSnowflakeNextIdStr()); // 雪花算法生成订单号 order.setUserId(userId); order.setTotalAmount(totalAmount); order.setStatus(OrderStatusEnum.UNPAID.getCode()); // ... 设置其他字段 orderMapper.insert(order); // 4. 保存订单明细 for (OrderItem item : orderItems) { item.setOrderId(order.getId()); orderItemMapper.insert(item); } // 5. 清理购物车中已下单的商品异步或同步 cartService.clearCheckedItems(userId, orderCreateDTO.getCartItemIds()); log.info(订单创建成功订单号{}用户{}, order.getOrderNo(), userId); return order.getOrderNo(); } }五、总结与展望本文介绍了基于Spring Boot的美妆商城系统的设计思路、技术选型与核心代码实现。该系统涵盖了电商平台的主要功能模块并采用了当前主流的技术栈具备良好的可扩展性和可维护性。后续可优化的方向包括引入Elasticsearch提升商品搜索性能与相关性使用Spring Cloud Alibaba将单体应用拆分为微服务商品服务、订单服务、用户服务等集成消息队列RocketMQ/RabbitMQ处理异步任务如订单超时关闭、库存同步完善监控告警体系Prometheus Grafana等。通过此项目开发者可以深入理解Spring Boot在企业级应用中的实践掌握电商系统的核心业务流程与架构设计为开发更复杂的分布式系统打下坚实基础。