基于Spring Boot与Vue的图书商城管理系统实现方案
一、系统架构设计
采用前后端分离架构:
- 前端:Vue3 + TypeScript + Pinia + Element Plus
- 后端:Spring Boot 3 + Spring Security + JWT + MyBatis-Plus
- 数据库:MySQL 8.0 + Redis(缓存)
- 部署:Nginx + Docker容器化
二、核心功能模块
模块 | 功能点 |
---|---|
用户管理 | 注册/登录、个人信息管理、角色权限(用户/管理员) |
图书管理 | 图书CRUD、多条件检索(书名/作者/分类)、库存预警、封面图片上传 |
分类管理 | 多级分类树(如:文学→小说→科幻) |
购物车 | 增删改商品、批量操作、实时计算总价 |
订单系统 | 订单生成、支付模拟(对接支付宝沙箱)、状态流转(待付款→发货→完成) |
后台管理 | 数据看板(销量/库存热力图)、操作日志审计、用户封禁 |
三、数据库设计(关键表)
-- 用户表
CREATE TABLE `user` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) UNIQUE NOT NULL,
`password` VARCHAR(100) NOT NULL, -- BCrypt加密存储
`email` VARCHAR(50),
`role` ENUM('USER','ADMIN') DEFAULT 'USER'
);
-- 图书表
CREATE TABLE `book` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(50),
`price` DECIMAL(10,2) NOT NULL,
`stock` INT DEFAULT 0,
`category_id` INT, -- 外键关联分类
`cover_url` VARCHAR(200) -- 封面图OSS地址
);
-- 订单表(事务核心)
CREATE TABLE `order` (
`id` VARCHAR(32) PRIMARY KEY, -- 分布式ID(雪花算法)
`user_id` INT NOT NULL,
`total_amount` DECIMAL(10,2),
`status` TINYINT(1) DEFAULT 0, -- 0:待支付 1:已支付 2:已发货
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);
四、后端关键实现
- 安全认证
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/books/**").hasRole("ADMIN") // 管理员权限
.antMatchers("/api/cart/**").authenticated() // 需登录
.anyRequest().permitAll()
.and()
.addFilter(new JwtAuthFilter(authenticationManager()));
return http.build();
}
}
- 事务型订单创建
@Transactional
public String createOrder(OrderDTO dto) {
// 1. 校验库存(Redis分布式锁)
List<Book> books = bookService.checkStock(dto.getItems());
// 2. 扣减库存
bookService.batchDeductStock(books);
// 3. 生成订单(MyBatis-Plus乐观锁)
Order order = new Order();
order.setId(SnowflakeId.nextId());
orderMapper.insert(order);
// 4. 记录订单明细
orderItemService.batchInsert(dto.getItems());
return order.getId();
}
五、前端关键实现
- 状态管理(Pinia)
// stores/cart.ts
export const useCartStore = defineStore('cart', {
state: () => ({ items: [] as CartItem[] }),
actions: {
async addItem(book: Book) {
const res = await api.addToCart(book.id);
this.items = res.data;
}
},
getters: {
totalPrice: (state) => state.items.reduce((sum, item) =>
sum + item.price * item.quantity, 0)
}
});
- 动态路由权限
// router/index.js
router.beforeEach((to, from) => {
const userStore = useUserStore();
if (to.meta.requiresAdmin && !userStore.isAdmin) {
return '/forbidden'; // 跳转无权限页面
}
});
六、性能优化策略
- 缓存机制:
- Redis缓存热门图书信息(TTL 30分钟)
- 使用Spring Cache注解
@Cacheable
- 图片处理:
- 前端压缩图片 → 上传阿里云OSS
- 后端生成缩略图(Thumbnailator)
- 异步任务:
- 邮件通知、库存预警使用Spring
@Async
- 前端懒加载:
- Vue路由动态导入:
component: () => import('./views/BookDetail.vue')
七、部署方案
# 1. 后端打包
mvn clean package -DskipTests
# 2. 前端构建
npm run build
# 3. Docker部署
docker-compose up -d # 包含MySQL+Redis+Nginx+SpringBoot容器
八、扩展性设计
- 支付模块插件化
- 定义
PaymentService
接口 - 实现类:
AlipayService
/WechatPayService
- 日志审计
- 使用Spring AOP记录管理员敏感操作
- 存储到Elasticsearch便于检索
- 微服务拆分
- 未来可拆分为:用户服务、商品服务、订单服务、支付服务
技术栈亮点
- 并发控制:Redis分布式锁 + 数据库乐观锁
- 安全:JWT自动续期 + HTTPS传输
- 体验:前端骨架屏加载 + 错误边界处理
- 监控:Spring Boot Actuator + Prometheus
注意事项:需重点测试高并发下单场景(超卖问题),建议使用JMeter模拟压测,配合数据库事务隔离级别
REPEATABLE_READ
。