1. 项目概述
这个网上点餐系统是我在研究生期间为本地一家连锁餐厅开发的实际项目,采用当前主流的前后端分离架构。后端使用SpringBoot框架提供RESTful API服务,前端基于Vue3构建响应式用户界面,数据持久层采用MyBatis操作MySQL数据库。系统上线后帮助餐厅将订单处理效率提升了60%,顾客平均等待时间缩短了40%。
为什么选择这套技术栈?SpringBoot的自动配置和起步依赖让后端服务可以快速搭建;Vue3的Composition API更适合复杂交互场景;MyBatis在SQL优化方面提供了更大灵活性。前后端分离的架构让团队可以并行开发,也便于后期功能扩展。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术栈选型分析
后端选择SpringBoot 2.7.x版本(考虑长期支持),主要依赖包括:
- spring-boot-starter-web:提供Web MVC支持
- mybatis-spring-boot-starter:集成MyBatis
- spring-boot-starter-data-redis:缓存菜品信息
- hutool-all:处理各种工具类操作
前端采用Vue3 + Vite构建,主要组件库使用Element Plus,其表格和表单组件非常适合餐饮系统的管理后台。特别选择了Pinia作为状态管理库,相比Vuex更适合组合式API。
2.2 数据库设计要点
MySQL 8.0的表设计遵循了几个原则:
- 所有表都有自增主键(除订单表使用雪花ID)
- 金额字段统一使用DECIMAL(12,2)防止精度丢失
- 状态字段使用TINYINT配合枚举类
- 建立适当的联合索引(如用户ID+订单状态)
特别注意了库存扣减的并发控制,最终采用MySQL行锁+乐观锁的方案:
sql复制UPDATE dish_info
SET stock_quantity = stock_quantity - 1,
version = version + 1
WHERE dish_id = ? AND stock_quantity >= 1 AND version = ?
3. 核心功能实现
3.1 用户认证模块
采用JWT+Redis的方案实现无状态认证:
- 登
