1. 项目概述:SpringBoot+Vue全栈在线商城系统
这套基于SpringBoot+Vue的全栈在线商城系统管理平台,是我在指导大学生毕业设计和企业新人培训时反复打磨的教学级项目。采用前后端分离架构,后端使用SpringBoot 2.7 + MyBatis Plus构建RESTful API,前端采用Vue 3 + Element Plus实现管理后台,数据库选用MySQL 8.0,完整实现了商品管理、订单处理、用户权限等电商核心功能模块。
与市面上常见的Demo级项目不同,这个系统特别注重生产环境下的工程化实践:
- 后端包含JWT鉴权、Swagger接口文档、Redis缓存、AOP日志等企业级组件
- 前端采用Vue CLI脚手架工程,配置了axios拦截器、路由守卫和动态菜单
- 数据库设计符合第三范式,包含索引优化和事务处理示例
- 提供从需求分析到部署上线的完整文档链
提示:系统默认使用Java 11运行环境,MySQL建议使用8.0以上版本以获得完整的JSON字段支持
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术栈深度解析
2.1 SpringBoot后端设计要点
后端工程采用经典的三层架构设计:
code复制com.example.mall
├── config # 配置类(Swagger/Redis/Security)
├── controller # 暴露的REST接口
├── service # 业务逻辑层
├── dao # 数据访问层(MyBatis Plus)
└── entity # 持久化实体
关键配置示例(application.yml):
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/mall?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 127.0.0.1
port: 6379
2.2 Vue前端工程化实践
前端项目采用Vue 3组合式API开发,主要技术亮点:
- 基于Vite的快速构建
- Element Plus组件库按需引入
- 前端路由采用history模式
- 使用Pinia进行状态管理
典型页面组件结构:
javascript复制// src/views/product/List.vue
<script setup>
import { ref, onMounted } from 'vue'
import { getProductList } from '@/api/product'
const tableData = ref([])
onMounted(async () => {
const res = await getProductList()
tableData.value = res.data
})
</script>
3. 数据库设计与优化
3.1 核心表结构
主要业务表及其关系:
sql复制CREATE TABLE `product` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '商品名称',
`price` decimal(10,2) NOT NULL COMMENT '售价',
`stock` int NOT NULL DEFAULT '0' COMMENT '库存',
`category_id` bigint DEFAULT NULL COMMENT '分类ID',
PRIMARY KEY (`id`),
KEY `idx_category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 事务处理示例
订单创建时的典型事务操作:
java复制@Transactional
public boolean createOrder(OrderDTO dto) {
// 1. 扣减库存
productMapper.reduceStock(dto.getProductId(), dto.getQuantity());
// 2. 生成订单
Order order = new Order();
BeanUtils.copyProperties(dto, order);
orderMapper.insert(order);
// 3. 记录日志
logService.addOrderLog(order.getId());
return true;
}
4. 典型业务场景实现
4.1 商品搜索功能
后端实现(使用MyBatis Plus动态SQL):
java复制public Page<Product> searchProducts(ProductQuery query) {
return productMapper.selectPage(new Page<>(query.getPage(), query.getSize()),
new QueryWrapper<Product>()
.like(StringUtils.isNotBlank(query.getKeyword()), "name", query.getKeyword())
.eq(query.getCategoryId() != null, "category_id", query.getCategoryId())
.between("price", query.getMinPrice(), query.getMaxPrice())
);
}
前端调用示例:
javascript复制const searchProducts = async () => {
loading.value = true
try {
const res = await getProductList({
page: pagination.currentPage,
size: pagination.pageSize,
...searchForm
})
tableData.value = res.data.records
pagination.total = res.data.total
} finally {
loading.value = false
}
}
4.2 权限控制方案
基于RBAC模型的权限设计:
java复制@PreAuthorize("hasAuthority('product:add')")
@PostMapping("/products")
public Result addProduct(@RequestBody Product product) {
return Result.success(productService.save(product));
}
前端路由守卫:
javascript复制router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !store.getters.token) {
next('/login')
} else {
next()
}
})
5. 项目部署与调优
5.1 后端打包与运行
使用SpringBoot Maven插件打包:
bash复制mvn clean package -DskipTests
java -jar target/mall-backend-0.0.1-SNAPSHOT.jar
5.2 前端生产环境构建
优化构建配置(vite.config.js):
javascript复制build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return id.toString().split('node_modules/')[1].split('/')[0]
}
}
}
}
}
构建命令:
bash复制npm run build
6. 教学使用建议
6.1 适合的课程设计方向
-
Java Web开发课程:
- 重点讲解SpringBoot自动配置原理
- MyBatis Plus的CRUD接口实现
- RESTful API设计规范
-
前端开发课程:
- Vue 3组合式API实践
- 前端工程化配置
- Element Plus组件二次封装
-
数据库课程:
- 电商系统ER图设计
- SQL优化案例分析
- 事务隔离级别实验
6.2 常见问题解决方案
跨域问题处理:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.maxAge(3600);
}
}
Vue页面刷新404问题:
nginx复制location / {
try_files $uri $uri/ /index.html;
}
7. 扩展开发建议
-
支付模块集成:
- 对接支付宝沙箱环境
- 实现支付结果异步通知
- 订单状态机设计
-
秒杀功能实现:
- Redis预减库存
- 消息队列削峰
- 接口限流策略
-
微服务化改造:
- 拆分为商品/订单/用户服务
- Spring Cloud Alibaba组件集成
- Nacos服务注册发现
这套系统在实际教学使用中,我建议学生先运行现有代码理解基础架构,再选择1-2个扩展方向进行深度开发。比如在实现支付功能时,可以结合支付宝官方文档,理解签名验证、异步通知等关键流程。对于性能优化方向,可以从数据库索引、缓存策略、接口响应等不同层面进行实测对比
