项目名称:智选商城 - 一个 B2C 电商平台
我们将以一个名为“智选商城”的项目为例,它将涵盖从用户注册、商品浏览、购物车、下单到支付和后台管理的完整业务流程。

项目概述
项目简介 智选商城是一个面向消费者的在线零售平台,用户可以浏览商品、加入购物车、下单购买,并通过第三方支付完成支付,管理员可以通过后台管理系统对商品、订单、用户、库存等进行管理。
核心功能模块
- 用户模块: 注册、登录(支持手机号/邮箱)、个人信息管理、收货地址管理。
- 商品模块: 商品分类、商品详情展示(图文/视频)、商品搜索(按关键词、分类)。
- 购物车模块: 添加商品、查看购物车、修改商品数量、删除商品、勾选/取消勾选商品。
- 订单模块: 创建订单、查看订单列表、查看订单详情、取消订单(特定状态)。
- 支付模块: 调用第三方支付接口(如支付宝/微信支付)进行支付、查询支付状态。
- 后台管理模块: 商品管理(增删改查)、订单管理、用户管理、数据统计(如销量排行榜)。
技术选型
这是一个非常主流且强大的 Java 全能栈技术组合,适合中大型项目开发。

| 技术领域 | 技术选型 | 版本 | 说明 |
|---|---|---|---|
| 前端 | Vue.js + Element Plus | x | 现代化的前端框架,提供丰富的 UI 组件,开发效率高。 |
| 后端 | Spring Boot | 7.x | 简化 Spring 应用的初始搭建和开发过程,约定优于配置。 |
| Spring MVC | - | 提供清晰的 MVC 架构,处理 HTTP 请求和响应。 | |
| MyBatis-Plus | 5.x | 强大的 MyBatis 增强工具,简化 CRUD 操作,提供代码生成器。 | |
| Spring Security + JWT | - | 用于用户认证和授权,实现无状态 API 接口安全。 | |
| 数据库 | MySQL | 0.x | 主流关系型数据库,存储业务核心数据。 |
| Redis | x | 高性能的 NoSQL 数据库,用于缓存、Session 共享、分布式锁等。 | |
| 中间件 | RabbitMQ | 9.x | 消息队列,用于异步处理(如订单超时取消、短信发送)。 |
| Nginx | 20.x | 反向代理服务器,负载均衡,静态资源服务器。 | |
| 工具 | Maven | 8.x | 项目构建和依赖管理工具。 |
| Git | - | 版本控制工具。 | |
| Lombok | - | 简化 JavaBean 代码(getter, setter, constructor 等)。 | |
| Hutool | 8.x | Java 小工具类库,简化常用方法调用。 |
项目架构设计
我们采用经典的 前后端分离 架构。
整体架构图
+----------------+ +-------------------+ +----------------+
| 用户浏览器 |----->| Nginx |----->| 前端服务器 |
| (Vue App) | | (反向代理/负载均衡)| | (Nginx + 静态资源) |
+----------------+ +-------------------+ +----------------+
^ |
| | HTTP/HTTPS API
| v
+----------------+ +-----------------------------------------------+
| 第三方服务 |<---->| 后端服务器集群 |
| (支付宝/微信) | | (Spring Boot + Spring Security + MyBatis-Plus) |
+----------------+ +-----------------------------------------------+
^ |
| | JDBC
| v
+----------------+ +-----------------------------------------------+
| 消息队列 |<----| 数据库主从集群 |
| (RabbitMQ) | | (MySQL Master + Slave, Redis Cluster) |
+----------------+ +-----------------------------------------------+
后端分层架构 我们采用经典的 三层架构(MVC),并在此基础上进行扩展。
com.zxshop
├── common // 公共模块
│ ├── config // 全局配置 (e.g., SecurityConfig, RedisConfig)
│ ├── constant // 常量定义
│ ├── exception // 全局异常处理
│ ├── result // 统一返回结果封装 (R.java)
│ └── utils // 工具类
├── module // 业务模块
│ ├── product // 商品模块
│ │ ├── controller (ProductController)
│ │ ├── service (IProductService, ProductServiceImpl)
│ │ ├── mapper (ProductMapper)
│ │ └── entity/dto (Product.java, ProductDTO.java)
│ ├── order // 订单模块
│ ├── cart // 购物车模块
│ ├── pay // 支付模块
│ └── user // 用户模块
├── security // 安全模块
│ ├── component // JWT 过滤器 (JwtAuthenticationFilter)
│ ├── config // Spring Security 配置
│ └── utils // JWT 工具类
└── ZxShopApplication.java // 应用启动类
核心模块实战流程
我们将以 “用户下单” 这个核心业务流程为例,展示各技术点的整合。

业务流程:
- 用户在前端点击“结算”按钮。
- 前端携带选中的购物车商品 IDs 请求后端
/order/create接口。 - 后端创建订单,并扣减库存。
- 创建成功后,生成支付订单,并返回支付二维码信息给前端。
- 前端展示二维码,用户扫码支付。
- 支付宝/微信服务器异步通知后端支付结果。
- 后端处理异步通知,更新订单状态为“已支付”。
技术实现步骤:
Step 1: 统一结果封装
创建一个 R.java 类,用于统一后端 API 的返回格式,方便前端处理。
// common/result/R.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class R<T> {
private Integer code; // 200成功, 其他失败
private String msg;
private T data;
public static <T> R<T> success(T data) {
return new R<>(200, "success", data);
}
public static <T> R<T> success() {
return success(null);
}
public static R<?> error(String msg) {
return new R<>(500, msg, null);
}
}
Step 2: 用户认证与授权
使用 Spring Security + JWT 保护 /order/create 等需要登录的接口。
// security/config/SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**", "/product/**").permitAll() // 登录和商品列表无需认证
.anyRequest().authenticated(); // 其他所有请求都需要认证
// 添加 JWT 过滤器
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
// ... 其他配置
}
Step 3: 订单创建接口
// module/order/controller/OrderController.java
@RestController
@RequestMapping("/api/order")
@RequiredArgsConstructor // Lombok 自动注入
public class OrderController {
private final IOrderService orderService;
@PostMapping("/create")
public R<OrderVO> createOrder(@RequestBody CreateOrderDTO createOrderDTO) {
// 1. 从 SecurityContext 获取当前登录用户ID (通过JWT解析)
Long userId = SecurityUtils.getUserId();
// 2. 调用服务层创建订单
OrderVO orderVO = orderService.createOrder(userId, createOrderDTO);
// 3. 返回统一结果
return R.success(orderVO);
}
}
Step 4: 服务层业务逻辑
// module/order/service/impl/OrderServiceImpl.java
@Service
@RequiredArgsConstructor
public class OrderServiceImpl implements IOrderService {
private final ProductMapper productMapper;
private final OrderMapper orderMapper;
private final RedisTemplate<String, Object> redisTemplate;
private final RabbitTemplate rabbitTemplate;
@Transactional // 开启事务
@Override
public OrderVO createOrder(Long userId, CreateOrderDTO createOrderDTO) {
// 1. 校验商品库存 (使用 Redis 缓存热点商品)
String stockKey = "product:stock:" + createOrderDTO.getProductId();
Integer stock = (Integer) redisTemplate.opsForValue().get(stockKey);
if (stock == null || stock < createOrderDTO.getCount()) {
throw new BusinessException("商品库存不足");
}
// 2. 扣减库存 (先操作 Redis,再异步更新数据库,保证高性能)
redisTemplate.opsForValue().decrement(stockKey, createOrderDTO.getCount());
// 3. 创建订单
Order order = new Order();
// ... 设置订单属性
orderMapper.insert(order);
// 4. 发送消息到队列,异步更新数据库库存
ProductStockUpdateMessage message = new ProductStockUpdateMessage(createOrderDTO.getProductId(), createOrderDTO.getCount());
rabbitTemplate.convertAndSend("product.stock.update", message);
// 5. 调用支付服务生成支付信息
// ...
return convertToVO(order);
}
}
Step 5: 异步库存更新 (消息队列)
创建一个消费者,监听 product.stock.update 队列,负责将库存变更同步到数据库。
// module/product/consumer/ProductStockUpdateConsumer.java
@Component
@RabbitListener(queues = "product.stock.update")
public class ProductStockUpdateConsumer {
@Autowired
private ProductMapper productMapper;
@RabbitHandler
public void handle(ProductStockUpdateMessage message) {
// 使用乐观锁或悲观锁更新数据库库存
productMapper.decreaseStock(message.getProductId(), message.getCount());
}
}
Step 6: 支付集成 使用支付宝/微信的官方 SDK,调用其统一下单接口生成支付订单,并处理异步通知。
// module/pay/service/AlipayService.java
@Service
public class AlipayService {
public String createPayOrder(Order order) {
// 1. 初始化 AlipayClient
// 2. 设置请求参数 (订单号, 金额, 回调地址等)
// 3. 调用 alipay.trade.page.pay() 方法
// 4. 返回一个表单字符串或二维码链接给前端
}
@RabbitListener(queues = "alipay.notify")
public void handleAlipayNotify(String notifyData) {
// 1. 验证签名
// 2. 解析通知内容,获取订单号和交易状态
// 3. 如果是交易成功,更新订单状态为 "PAID"
orderMapper.updateStatusByOrderNo(orderNo, "PAID");
}
}
项目总结与拓展
项目亮点
- 技术栈完整: 涵盖了 Java Web 开发的主流技术,从后端到前端,从数据库到中间件。
- 架构清晰: 采用前后端分离和分层架构,代码结构清晰,易于维护和扩展。
- 实战性强: 业务流程贴近真实电商场景,解决了高并发(缓存、消息队列)、安全性(JWT)、分布式事务(最终一致性)等常见问题。
- 最佳实践: 使用了统一结果封装、全局异常处理、事务管理、代码生成等工程化实践。
可拓展方向
- 微服务化: 将项目拆分为多个微服务,如用户服务、商品服务、订单服务、支付服务等,通过 Spring Cloud Alibaba (Nacos, Sentinel, Seata) 进行治理。
- 容器化部署: 使用 Docker 将每个应用打包成镜像,通过 Kubernetes (K8s) 进行容器编排和自动化部署。
- 性能优化: 引入 Elasticsearch 实现更强大的商品搜索;使用 CDN 加速静态资源访问;对热点数据进行多级缓存。
- 功能增强: 增加秒杀功能、优惠券系统、评价系统、商品推荐系统等。
这个“智选商城”项目案例为你提供了一个完整的实战框架,你可以基于这个框架,逐步填充每个模块的细节,深入理解每个技术点在实际项目中的应用,最终达到“实战突击”的目的,祝你学习愉快!
