1. 项目背景与核心价值
网上点餐系统作为餐饮行业数字化转型的典型应用,正在快速替代传统纸质菜单。这个毕业设计项目采用SpringBoot+Vue的前后端分离架构,完美契合当前企业级开发的主流技术路线。我在实际开发中发现,这种架构不仅能让学生掌握全栈开发的核心技能,还能深入理解现代Web应用的分层设计思想。
前后端分离模式相比传统JSP开发有显著优势:前端Vue负责页面渲染和用户交互,后端SpringBoot专注业务逻辑和数据处理,二者通过RESTful API通信。这种分工明确的架构让代码更易维护,也便于团队协作开发。对于计算机专业学生而言,完成这样一个完整项目,能系统性地提升工程实践能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 后端技术栈解析
SpringBoot作为后端框架的选择非常明智。它简化了SSM框架的配置复杂度,内置Tomcat服务器,通过starter依赖可以快速集成MyBatis、Redis等常用组件。我在项目中特别使用了这些配置:
java复制// MyBatis配置示例
@MapperScan("com.canteen.mapper")
@EnableCaching // 开启Redis缓存
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
数据库设计遵循餐饮业务特点,核心表包括:
- 用户表(user):存储顾客和管理员信息
- 菜品表(dish):记录菜品详情和库存
- 订单表(order):主订单信息
- 订单明细表(order_detail):记录每个订单中的具体菜品
2.2 前端技术方案
Vue3+Element Plus的组合提供了良好的开发体验。通过axios与后端交互,关键配置如下:
javascript复制// axios全局配置
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 5000
})
// 请求拦截器
service.interceptors.request.use(config => {
config.headers['Authorization'] = getToken()
return config
})
前端路由采用vue-router实现页面跳转,配合Vuex进行状态管理,形成了清晰的代码结构:
code复制src/
├── api/ # 接口定义
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── store/ # 状态管理
└── views/ # 页面组件
3. 核心功能实现细节
3.1 用户认证模块
采用JWT进行无状态认证,解决了session共享问题。后端核心代码:
java复制// JWT工具类
public class JwtUtil {
private static final String SECRET = "canteen-secret";
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + 30*60*1000))
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
}
前端在登录后需要妥善处理token:
javascript复制// 登录成功后存储token
localStorage.setItem('token', res.data.token)
// 后续请求自动携带token
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('token')
3.2 购物车与订单系统
购物车采用前端本地存储+后端校验的方案,关键逻辑包括:
- 用户添加菜品到本地购物车
- 提交订单时发送完整购物车数据到后端
- 后端校验菜品库存和价格
- 创建订单并返回支付信息
订单状态机设计:
java复制public enum OrderStatus {
UNPAID, // 待支付
PAID, // 已支付
COOKING, // 制作中
DELIVERING, // 配送中
COMPLETED, // 已完成
CANCELLED // 已取消
}
4. 项目部署与优化
4.1 前后端分离部署
前端使用nginx部署,关键配置:
code复制server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://backend:8080/;
}
}
后端采用SpringBoot内置Tomcat,通过application.yml配置生产环境参数:
yaml复制server:
port: 8080
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://mysql:3306/canteen?useSSL=false
username: root
password: 123456
4.2 性能优化实践
- 数据库优化:为高频查询字段添加索引
sql复制CREATE INDEX idx_dish_status ON dish(status);
CREATE INDEX idx_order_user ON order(user_id);
- Redis缓存热点数据:
java复制@Cacheable(value = "dish", key = "#id")
public Dish getById(Long id) {
return dishMapper.selectById(id);
}
- 前端懒加载和组件异步加载:
javascript复制const Menu = () => import('./views/Menu.vue')
5. 开发经验与问题排查
5.1 跨域问题解决方案
开发阶段常见的跨域问题可通过以下方式解决:
后端配置:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.maxAge(3600);
}
}
前端开发环境配置(vue.config.js):
javascript复制devServer: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
5.2 典型问题排查指南
- 接口404错误:
- 检查后端Controller是否有@RestController注解
- 确认@RequestMapping路径是否正确
- 查看SpringBoot启动日志是否有映射成功
- 页面空白问题:
- 检查vue-router的history模式是否需要后端配合
- 查看浏览器控制台是否有资源加载错误
- 确认Vue组件是否正确定义和注册
- 数据库连接失败:
- 检查application.yml中的数据库配置
- 确认MySQL服务是否启动
- 验证数据库用户名密码是否正确
6. 项目扩展方向
这个基础框架可以进一步扩展为:
- 微信小程序端:使用uni-app开发跨平台小程序
- 后台数据分析:集成ECharts实现销售数据可视化
- 智能推荐系统:基于用户历史订单实现菜品推荐
- 外卖配送跟踪:集成地图API实现实时轨迹展示
在开发过程中,我特别建议使用Git进行版本控制,合理的分支策略可以让团队协作更高效。例如:
code复制master - 生产环境代码
develop - 集成测试分支
feature/* - 功能开发分支
hotfix/* - 紧急修复分支
对于初学者来说,这个项目最值得关注的三个核心点是:RESTful API设计规范、Vue组件化开发思想、以及SpringBoot的自动配置原理。掌握这些要点,就能快速上手企业级应用开发。
