ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于 SpringBoot 的美妆购物商城管理系统:技术栈、背景意义与核心代码

基于 SpringBoot 的美妆购物商城管理系统:技术栈、背景意义与核心代码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 项目背景与意义

随着互联网和移动支付的普及,线上购物已成为大众消费的主要方式之一。美妆行业作为消费市场的重要组成部分,其产品具有更新快、品类多、用户复购率高等特点,传统的线下门店销售模式已难以满足用户对便捷选购、个性化推荐和快速配送的需求。因此,开发一套基于 SpringBoot 的美妆购物商城管理系统,具有重要的现实意义。

从用户角度看,该系统提供了商品浏览、搜索、购物车、在线下单、订单查询等一站式购物体验,帮助用户高效完成美妆产品的选购;从商家角度看,系统实现了商品管理、库存管理、订单处理和销售数据统计等核心功能,能够显著提升运营效率,降低人工成本。同时,基于 SpringBoot 的轻量级架构使得系统易于部署、扩展和维护,适合中小型美妆企业快速搭建自己的电商平台。

2. 系统技术栈

本系统采用前后端分离的开发模式,后端基于 SpringBoot 框架构建,前端使用 Vue.js 配合 Element UI 组件库,数据库选用 MySQL,并辅以 Redis 实现缓存加速。整体技术选型兼顾了开发效率、系统性能和后期维护的便利性。

层次技术选型说明
后端框架SpringBoot 2.x提供快速构建、自动配置和嵌入式服务器能力
持久层框架MyBatis-Plus简化数据库操作,支持通用 CRUD 和分页查询
数据库MySQL 8.0存储用户、商品、订单等核心业务数据
缓存中间件Redis缓存热门商品信息和用户会话,提升响应速度
前端框架Vue.js 2.x + Element UI构建响应式管理后台和商城前端页面
安全认证Spring Security + JWT实现用户登录认证和接口权限控制
构建工具Maven管理项目依赖和构建流程

在架构设计上,系统采用分层架构,包括 Controller 控制层、Service 业务逻辑层、Mapper 数据访问层和 Entity 实体层。各层职责清晰,便于团队协作开发和后期功能扩展。

3. 系统核心功能模块

本系统围绕美妆商城业务场景,设计了以下核心功能模块:

  • 用户模块:包含用户注册、登录、个人信息维护、收货地址管理等功能,支持基于 JWT 的无状态认证。
  • 商品模块:提供美妆商品的分类管理、商品信息维护、图片上传、库存管理和上下架操作。
  • 购物车模块:支持用户将心仪商品加入购物车,修改购买数量,实时计算商品总价。
  • 订单模块:涵盖订单创建、订单支付、订单状态流转(待付款、待发货、待收货、已完成)以及订单取消和退款处理。
  • 管理后台模块:面向系统管理员,提供商品管理、订单管理、用户管理、数据统计等运营功能。

4. 核心代码实现

下面选取系统中最具代表性的几个核心功能,展示其关键代码实现。

4.1 用户登录认证(JWT 生成与校验)

用户登录成功后,后端生成 JWT 令牌返回给前端,前端在后续请求中携带该令牌访问受保护的接口。以下为 JWT 工具类的核心代码:

import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; @Component public class JwtUtil { // 签名密钥,实际项目中应配置在 application.yml 中 private static final String SECRET_KEY = "your-secret-key"; private static final long EXPIRE_TIME = 24 * 60 * 60 * 1000; // 24小时 /** 生成 JWT 令牌 */ public String generateToken(Long userId, String username) { Map<String, Object> claims = new HashMap<>(); claims.put("userId", userId); claims.put("username", username); Date now = new Date(); Date expireDate = new Date(now.getTime() + EXPIRE_TIME); return Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } /** 解析 JWT 令牌,获取用户信息 */ public Claims parseToken(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); } /** 校验令牌是否有效 */ public boolean validateToken(String token) { try { parseToken(token); return true; } catch (Exception e) { return false; } } }

4.2 商品分页查询(MyBatis-Plus 实现)

商品列表是商城首页的核心展示内容,采用 MyBatis-Plus 的分页插件可以快速实现高效的分页查询。以下为商品查询的 Service 层核心代码:

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService { @Resource private ProductMapper productMapper; /** 分页查询商品列表,支持按分类和关键字过滤 */ @Override public Page&lt;Product&gt; queryProductPage(int pageNum, int pageSize, Long categoryId, String keyword) { Page&lt;Product&gt; page = new Page&lt;&gt;(pageNum, pageSize); LambdaQueryWrapper&lt;Product&gt; wrapper = new LambdaQueryWrapper&lt;&gt;(); // 按分类过滤 if (categoryId != null) { wrapper.eq(Product::getCategoryId, categoryId); } // 按商品名称模糊查询 if (keyword != null &amp;&amp; !keyword.isEmpty()) { wrapper.like(Product::getProductName, keyword); } // 按上架状态过滤,并按照创建时间倒序排列 wrapper.eq(Product::getStatus, 1) .orderByDesc(Product::getCreateTime); return productMapper.selectPage(page, wrapper); } }

4.3 购物车添加商品(事务处理)

购物车操作涉及商品库存校验和购物车记录更新,为保证数据一致性,在 Service 层添加事务控制。以下为添加购物车的核心代码:

import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @Service public class CartServiceImpl implements CartService { @Resource private CartMapper cartMapper; @Resource private ProductMapper productMapper; /** 添加商品到购物车 */ @Override @Transactional(rollbackFor = Exception.class) public boolean addToCart(Long userId, Long productId, Integer quantity) { // 1. 校验商品是否存在且处于上架状态 Product product = productMapper.selectById(productId); if (product == null || product.getStatus() != 1) { throw new RuntimeException("商品不存在或已下架"); } // 2. 校验库存是否充足 if (product.getStock() &lt; quantity) { throw new RuntimeException("商品库存不足"); } // 3. 查询购物车中是否已有该商品 LambdaQueryWrapper&lt;Cart&gt; wrapper = new LambdaQueryWrapper&lt;&gt;(); wrapper.eq(Cart::getUserId, userId) .eq(Cart::getProductId, productId); Cart existingCart = cartMapper.selectOne(wrapper); if (existingCart != null) { // 已存在则累加数量 existingCart.setQuantity(existingCart.getQuantity() + quantity); return cartMapper.updateById(existingCart) &gt; 0; } else { // 不存在则新增购物车记录 Cart cart = new Cart(); cart.setUserId(userId); cart.setProductId(productId); cart.setQuantity(quantity); cart.setChecked(1); return cartMapper.insert(cart) &gt; 0; } } }

4.4 订单创建(多表联动)

订单创建是商城系统的核心业务,涉及订单主表、订单明细表、商品库存扣减和购物车清理等多个操作,必须保证事务的原子性。以下为订单创建的 Service 核心代码:

import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.List; @Service public class OrderServiceImpl implements OrderService { @Resource private OrderMapper orderMapper; @Resource private OrderItemMapper orderItemMapper; @Resource private CartMapper cartMapper; @Resource private ProductMapper productMapper; /** 根据购物车选中的商品创建订单 */ @Override @Transactional(rollbackFor = Exception.class) public Order createOrder(Long userId, Long addressId, List&lt;Long&gt; cartIds) { // 1. 查询选中的购物车记录 List&lt;Cart&gt; cartList = cartMapper.selectBatchIds(cartIds); if (cartList == null || cartList.isEmpty()) { throw new RuntimeException("未选择任何商品"); } // 2. 计算订单总金额 BigDecimal totalAmount = BigDecimal.ZERO; for (Cart cart : cartList) { Product product = productMapper.selectById(cart.getProductId()); totalAmount = totalAmount.add(product.getPrice().multiply(BigDecimal.valueOf(cart.getQuantity()))); } // 3. 创建订单主记录 Order order = new Order(); order.setOrderNo(generateOrderNo()); order.setUserId(userId); order.setAddressId(addressId); order.setTotalAmount(totalAmount); order.setStatus(0); // 待付款 order.setCreateTime(new Date()); orderMapper.insert(order); // 4. 创建订单明细并扣减库存 for (Cart cart : cartList) { Product product = productMapper.selectById(cart.getProductId()); OrderItem item = new OrderItem(); item.setOrderId(order.getId()); item.setProductId(product.getId()); item.setProductName(product.getProductName()); item.setProductImage(product.getProductImage()); item.setPrice(product.getPrice()); item.setQuantity(cart.getQuantity()); orderItemMapper.insert(item); // 扣减库存 product.setStock(product.getStock() - cart.getQuantity()); productMapper.updateById(product); } // 5. 清空已下单的购物车记录 cartMapper.deleteBatchIds(cartIds); return order; } /** 生成订单编号:时间戳 + 用户ID后四位 */ private String generateOrderNo() { return System.currentTimeMillis() + String.format("%04d", new Random().nextInt(10000)); } }

5. 系统架构与部署

系统采用经典的三层架构,前端通过 HTTP 请求调用后端 RESTful API,后端经过 Controller、Service、Mapper 三层处理数据后返回 JSON 响应。Redis 用于缓存热点数据和用户会话,MySQL 作为主数据库持久化业务数据。

flowchart TD A[用户浏览器] -->|HTTP/JSON| B[Nginx 反向代理] B --> C[SpringBoot 后端服务] C --> D[Redis 缓存] C --> E[MySQL 数据库] C --> F[文件存储服务] G[管理员后台] --> B

在部署方面,后端可打包为可执行的 JAR 文件,配合 Docker 容器化部署,实现快速发布和弹性伸缩。前端静态资源可由 Nginx 托管,整体架构简单可靠,适合中小型美妆电商项目的上线运行。

6. 总结

本文围绕基于 SpringBoot 的美妆购物商城管理系统,从项目背景、技术栈、功能模块和核心代码四个方面进行了详细介绍。系统以 SpringBoot 为后端基础,结合 Vue.js 前端和 MySQL 数据库,实现了用户、商品、购物车、订单等核心业务闭环。通过 JWT 认证、MyBatis-Plus 分页、事务管理等技术手段,保证了系统的安全性、高效性和数据一致性。对于希望快速搭建美妆电商平台的开发者而言,本系统提供了一个结构清晰、易于扩展的参考实现。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进