1. 智慧点餐系统架构设计
SpringBoot智慧点餐系统采用前后端分离架构,后端基于SpringBoot框架实现业务逻辑和数据处理,前端使用Vue.js框架构建用户界面。系统整体架构分为表现层、业务逻辑层、数据访问层和数据存储层。
1.1 技术选型考量
后端选择SpringBoot框架主要基于以下考虑:
- 自动配置特性简化了Spring应用的初始搭建和开发过程
- 内嵌Tomcat服务器,无需额外部署WAR文件
- 丰富的Starter依赖可以快速集成常用组件
- 完善的生态系统和社区支持
数据库选用MySQL关系型数据库,原因包括:
- 开源免费,适合中小型项目
- 性能稳定,支持事务处理
- 与Spring生态集成良好
- 支持JSON数据类型,便于存储半结构化数据
前端采用Vue.js+ElementUI组合,优势在于:
- 组件化开发提高代码复用率
- 响应式数据绑定简化DOM操作
- ElementUI提供丰富的现成组件
- 轻量级框架,学习曲线平缓
1.2 系统模块划分
系统核心模块包括:
- 用户认证模块:处理用户注册、登录、权限控制
- 菜品管理模块:实现菜品的CRUD操作和分类管理
- 订单处理模块:处理点餐、支付、状态更新全流程
- 数据统计模块:分析销售数据,生成可视化报表
- 系统管理模块:配置系统参数,监控运行状态
每个模块采用独立包结构,通过接口定义服务边界,符合单一职责原则。模块间通过Spring的依赖注入机制进行协作,降低耦合度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库设计与实现
2.1 数据库表结构设计
系统主要包含以下核心表:
- 用户表(user):
sql复制CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '登录名',
`password` varchar(100) NOT NULL COMMENT '密码',
`real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`role` tinyint NOT NULL COMMENT '角色(0:顾客,1:商家,2:管理员)',
`status` tinyint DEFAULT '1' COMMENT '状态(0:禁用,1:正常)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 菜品分类表(category):
sql复制CREATE TABLE `category` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '分类名称',
`sort` int DEFAULT '0' COMMENT '排序',
`status` tinyint DEFAULT '1' COMMENT '状态(0:禁用,1:启用)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 菜品表(dish):
sql复制CREATE TABLE `dish` (
`id` bigint NOT NULL AUTO_INCREMENT,
`category_id` bigint NOT NULL COMMENT '分类ID',
`name` varchar(100) NOT NULL COMMENT '菜品名称',
`price` decimal(10,2) NOT NULL COMMENT '价格',
`image` varchar(255) DEFAULT NULL COMMENT '图片URL',
`description` text COMMENT '描述',
`status` tinyint DEFAULT '1' COMMENT '状态(0:停售,1:在售)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 订单表(order):
sql复制CREATE TABLE `order` (
`id` bigint NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL COMMENT '订单编号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`total_amount` decimal(10,2) NOT NULL COMMENT '总金额',
`status` tinyint NOT NULL COMMENT '状态(0:待支付,1:已支付,2:已取消,3:已完成)',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 订单明细表(order_detail):
sql复制CREATE TABLE `order_detail` (
`id` bigint NOT NULL AUTO_INCREMENT,
`order_id` bigint NOT NULL COMMENT '订单ID',
`dish_id` bigint NOT NULL COMMENT '菜品ID',
`dish_name` varchar(100) NOT NULL COMMENT '菜品名称',
`dish_image` varchar(255) DEFAULT NULL COMMENT '菜品图片',
`price` decimal(10,2) NOT NULL COMMENT '单价',
`quantity` int NOT NULL COMMENT '数量',
`subtotal` decimal(10,2) NOT NULL COMMENT '小计',
PRIMARY KEY (`id`),
KEY `idx_order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 数据库优化策略
- 索引优化:
- 为所有外键字段添加普通索引
- 为高频查询条件字段添加组合索引
- 使用覆盖索引减少回表操作
- 查询优化:
- 避免SELECT *,只查询必要字段
- 合理使用JOIN,避免多表关联查询
- 对大表查询添加LIMIT分页
- 使用EXPLAIN分析慢查询
- 事务控制:
- 订单创建和支付使用@Transactional注解
- 设置合理的事务隔离级别(默认READ_COMMITTED)
- 对批量操作进行分批处理
- 缓存策略:
- 使用Redis缓存热门菜品数据
- 实现二级缓存减少数据库压力
- 设置合理的缓存过期时间
3. 后端核心功能实现
3.1 SpringBoot应用配置
- 项目结构:
code复制src/main/java
├── com.example.ordering
│ ├── config # 配置类
│ ├── controller # 控制器
│ ├── service # 服务层
│ ├── repository # 数据访问
│ ├── entity # 实体类
│ ├── dto # 数据传输对象
│ ├── util # 工具类
│ └── exception # 异常处理
src/main/resources
├── application.yml # 主配置文件
├── static # 静态资源
└── templates # 模板文件
- 关键依赖配置(pom.xml):
xml复制<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据访问 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector
