当前位置: 首页 > news >正文

智慧商城(Smart Mall):基于 Spring Boot + Vue 3 的现代化电商平台实战

项目简介

智慧商城(Smart Mall)是一个基于Spring Boot 3.2 + Vue 3 + Redis + MySQL + Nginx构建的现代化电商平台。该项目采用前后端分离架构,完整实现了用户购物、商品管理、订单处理等核心电商功能,是学习企业级 Java 全栈开发的优秀参考案例。

技术栈详解

后端技术栈

技术版本职责
Spring Boot3.2.x应用框架
MySQL8.0+关系型数据库
Redis7.0+缓存服务
MyBatis Plus3.5.xORM框架
Spring Security6.x安全框架
JWT0.12.x身份认证
Maven3.x构建工具

前端技术栈

技术版本职责
Vue3.4.x前端框架
Vite5.x构建工具
Ant Design Vue4.2.xUI组件库
Pinia3.x状态管理
Vue Router4.x路由管理
Axios1.xHTTP客户端
Tailwind CSS3.xCSS框架
TypeScript5.4类型安全

核心功能模块

用户端功能

  1. 用户认证- 注册/登录,基于 JWT 的无状态认证机制
  2. 商品浏览- 分类筛选、关键词搜索、分页展示
  3. 购物车管理- 添加商品、修改数量、删除商品
  4. 订单管理- 创建订单、查看订单列表、订单详情
  5. 地址管理- 收货地址增删改查
  6. 个人中心- 用户信息查看与修改

管理端功能

  1. 商品管理- 商品的增删改查
  2. 订单管理- 订单状态更新(待付款、已付款、已发货、已完成)
  3. 数据仪表盘- 销售数据可视化展示

架构设计

项目结构

SmartMall/ ├── backend/ # 后端代码 │ ├── src/main/java/com/example/smartmall/ │ │ ├── controller/ # REST API控制器层 │ │ ├── service/ # 业务逻辑层 │ │ │ └── impl/ # 服务实现类 │ │ ├── mapper/ # 数据访问层 │ │ ├── entity/ # 数据库实体 │ │ ├── dto/ # 数据传输对象 │ │ ├── config/ # 配置类 │ │ ├── filter/ # 过滤器 │ │ └── utils/ # 工具类 │ └── src/main/resources/ │ ├── application.yml # 应用配置 │ ├── schema.sql # 数据库初始化脚本 │ └── data.sql # 初始数据 │ ├── frontend/ # 前端代码 │ ├── src/ │ │ ├── components/ # 公共组件 │ │ ├── pages/ # 页面组件 │ │ │ └── admin/ # 管理员页面 │ │ ├── stores/ # Pinia状态管理 │ │ ├── api/ # API请求封装 │ │ ├── types/ # TypeScript类型定义 │ │ └── router/ # 路由配置 │ └── dist/ # 构建产物 │ ├── nginx/ # Nginx配置 └── docker-compose.yml # Docker编排

关键设计亮点

1. JWT 认证机制

后端通过自定义JwtAuthenticationFilter实现 Token 验证:

// SecurityConfig.java@BeanpublicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{http.csrf(AbstractHttpConfigurer::disable).sessionManagement(session->session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)).authorizeHttpRequests(auth->auth.requestMatchers("/**").permitAll()).addFilterBefore(jwtAuthenticationFilter,UsernamePasswordAuthenticationFilter.class);returnhttp.build();}

前端通过 Axios 拦截器自动携带 Token:

// api/index.tsapi.interceptors.request.use((config)=>{consttoken=localStorage.getItem('token')if(token){config.headers.Authorization=`Bearer${token}`}returnconfig})
2. 购物车服务实现

购物车服务采用数据库存储方案,支持同商品数量累加:

// CartServiceImpl.javapublicCartItemaddToCart(LonguserId,CartItemRequestrequest){CartItemexistingItem=cartItemMapper.selectOne(newLambdaQueryWrapper<CartItem>().eq(CartItem::getUserId,userId).eq(CartItem::getProductId,request.getProductId()));if(existingItem!=null){existingItem.setQuantity(existingItem.getQuantity()+request.getQuantity());cartItemMapper.updateById(existingItem);returnexistingItem;}// 创建新购物车项...}
3. 订单创建事务处理

订单创建涉及多表操作,使用@Transactional保证数据一致性:

// OrderServiceImpl.java@TransactionalpublicOrdercreateOrder(LonguserId,CreateOrderRequestrequest){// 1. 验证购物车不为空// 2. 验证收货地址// 3. 生成订单号// 4. 计算总价并扣减库存// 5. 创建订单和订单明细// 6. 清空购物车}
4. Docker 容器化部署

项目提供完整的docker-compose.yml,一键启动所有服务:

services:mysql:# 数据库redis:# 缓存backend:# 后端服务nginx:# 反向代理

核心代码解读

后端控制器示例

[ProductController.java]展示了标准的 REST API 设计:

@RestController@RequestMapping("/api/products")@RequiredArgsConstructorpublicclassProductController{privatefinalProductServiceproductService;@GetMappingpublicResponse<Page<Product>>getProducts(@RequestParam(required=false)LongcategoryId,@RequestParam(required=false)Stringkeyword,@RequestParam(defaultValue="1")Integerpage,@RequestParam(defaultValue="10")Integersize){Page<Product>products=productService.getProducts(categoryId,keyword,page,size);returnResponse.success(products);}}

前端状态管理

[user.ts]使用 Pinia 管理用户状态:

exportconstuseUserStore=defineStore('user',()=>{constuser=ref<User|null>(null)consttoken=ref(localStorage.getItem('token')||'')constlogin=async(username:string,password:string)=>{constresponse=awaitapiPost<{token:string}>('/auth/login',{username,password})token.value=response.data.token localStorage.setItem('token',token.value)awaitfetchUser()}return{user,token,login,logout,isAdmin}})

前端页面示例

[HomePage.vue]展示了商品分类和热门商品展示:

<script setup lang="ts"> import { ref, onMounted } from 'vue' import api from '@/api' import type { Product, Category } from '@/types' import Carousel from '@/components/Carousel.vue' import ProductCard from '@/components/ProductCard.vue' const products = ref<Product[]>([]) const categories = ref<Category[]>([]) onMounted(async () => { const productResponse = await api.get('/products', { params: { page: 1, size: 8 } }) products.value = productResponse.data.records const categoryResponse = await api.get('/categories') categories.value = categoryResponse.data }) </script>

快速开始

环境要求

  • JDK 21+
  • Node.js 20+
  • MySQL 8.0+
  • Redis 7.0+

启动步骤

1. 数据库配置

CREATEDATABASEsmart_mallCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;

2. 启动后端服务

cdbackend mvn spring-boot:run# 服务启动在 http://localhost:8080

3. 启动前端服务

cdfrontendnpminstallnpmrun dev# 服务启动在 http://localhost:5173

4. Docker 一键部署

docker-composeup-d

默认账号

用户名密码角色
admin123456管理员
user123456普通用户

API 接口一览

模块接口方法描述
认证/api/auth/loginPOST用户登录
认证/api/auth/registerPOST用户注册
用户/api/users/meGET获取当前用户
商品/api/productsGET获取商品列表
商品/api/products/:idGET获取商品详情
购物车/api/cartGET获取购物车
购物车/api/cartPOST添加商品
订单/api/ordersGET获取订单列表
订单/api/ordersPOST创建订单
管理员/api/admin/productsPOST创建商品
管理员/api/admin/orders/:id/statusPUT更新订单状态

技术亮点总结

  1. 无状态认证- 基于 JWT 的 Token 认证,服务端无需维护会话状态
  2. 事务一致性- 订单创建使用@Transactional保证数据完整性
  3. 类型安全- 前端使用 TypeScript,后端使用强类型语言
  4. 组件化开发- Vue 3 Composition API + 组件复用
  5. 容器化部署- Docker Compose 一键部署所有服务
  6. RESTful 设计- 标准的 REST API 接口规范

总结

智慧商城项目展示了一个完整的现代化电商平台开发流程,涵盖了从需求分析、架构设计到代码实现的全过程。无论是学习 Spring Boot 后端开发,还是 Vue 3 前端开发,这个项目都是一个很好的实践案例。

项目代码结构清晰,遵循了业界最佳实践,可以作为企业级电商系统开发的参考模板。如果您对某个模块有更深的兴趣,欢迎深入研究源码进行学习!

http://www.cnnetsun.cn/news/3246116.html

相关文章:

  • Vim插件管理进阶指南:VAM实战配置与深度解析
  • SPI-NAND vs Raw NAND vs SPI-NOR:3种存储方案在Linux MTD子系统下的性能与选型对比
  • OpenMetadata:构建可信数据上下文与AI语义平台的完整指南
  • 基于TPS61170与PIC18F的智能DC-DC升压转换器设计
  • 一件衣服从进厂到出厂的完整流程解析
  • 分布式追踪采样策略:Head-based 与 Tail-based 精度成本平衡
  • 3分钟学会用Topit:Mac窗口置顶终极指南,工作效率提升200%
  • 如何实现科技成果的精准评估与快速筛选,避免成果转化资源浪费?
  • AI验布机常用术语解析:从瑕疵分类到四分制的完整认知
  • LAMMPS分子动力学模拟完整指南:从入门到实战的5个关键步骤
  • 算力实测 | 8卡RTX5090企业级AI服务器硬件配置与场景适配详解
  • STM32F103 硬件I2C 事件驱动编程:5个关键事件解析与400KHz配置实战
  • 去除甲醛产品哪家好?倍朗达活性锰分解片和除醛喷剂怎么选
  • 基于MA12070与PIC18F87J11的高保真音频系统设计
  • SE(3)几何自适应神经网络四旋翼抗风控制
  • DC 综合 3 大库文件配置详解:工艺库、链接库、符号库的 5 个关键参数
  • VyOS 1.4 路由配置实战:从静态路由到 OSPF/BGP 的 3 种网络互联方案
  • AI 辅助数据探索:未知数据集的结构化描述自动生成
  • 182、可变默认参数的连锁灾难:从一次生产事故理解 Python 的参数绑定机制
  • Draw.io UML 2.5 类图实战:3分钟完成Python类结构可视化(附模板)
  • 51单片机抢答器优化:3种按键扫描方案对比,中断法响应速度提升80%
  • Three.js 开源shader社区教程
  • 5分钟终极指南:一次性解决所有Windows C++运行库安装问题
  • 从样板美学到大宅人居|武汉 CYD 巢邑设计事务所的迭代之路
  • LTC1864与PIC32MZ的高精度ADC系统设计与优化
  • PIC18与PAM8904构建低功耗多模式警报系统
  • # 简易画板深度解析:Grid 像素格布局、画图/擦除模式切换与颜色预设
  • B2B订货系统开发服务商推荐:2026年最新测评
  • 数据流图(DFD) 3大平衡原则实战:从软考真题解析到5步排错法
  • 2026预算有限建站工具哪家好