
温馨提示本人主页置顶文章(点我)开头有 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) { Maplt;String, Objectgt; claims new HashMaplt;gt;(); 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 ServiceImplProductMapper, Product implements ProductService { Resource private ProductMapper productMapper; /** 分页查询商品列表支持按分类和关键字过滤 */ Override public Pagelt;Productgt; queryProductPage(int pageNum, int pageSize, Long categoryId, String keyword) { Pagelt;Productgt; page new Pagelt;gt;(pageNum, pageSize); LambdaQueryWrapperlt;Productgt; wrapper new LambdaQueryWrapperlt;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. 查询购物车中是否已有该商品 LambdaQueryWrapperlt;Cartgt; wrapper new LambdaQueryWrapperlt;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, Listlt;Longgt; cartIds) { // 1. 查询选中的购物车记录 Listlt;Cartgt; 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 分页、事务管理等技术手段保证了系统的安全性、高效性和数据一致性。对于希望快速搭建美妆电商平台的开发者而言本系统提供了一个结构清晰、易于扩展的参考实现。