当前位置: 首页 > news >正文

苍穹外卖01学习整理

苍穹外卖 Day01 整理笔记

一、课程内容总览

Day01 主要学习了 5 个部分:

  1. 软件开发整体介绍

  2. 苍穹外卖项目介绍

  3. 开发环境搭建

  4. 导入接口文档

  5. Swagger


二、软件开发整体介绍

1. 软件开发流程

软件开发通常分为 5 个阶段:

1)需求分析

产出内容:

  • 需求规格说明书

  • 产品原型

作用:

  • 明确系统做什么

  • 明确页面和业务流程

2)设计

设计内容:

  • UI设计

  • 数据库设计

  • 接口设计

作用:

  • 明确页面长什么样

  • 明确数据库表结构

  • 明确前后端交互方式

3)编码

内容:

  • 编写项目代码

  • 单元测试

作用:

  • 将设计落地实现

4)测试

内容:

  • 功能测试

  • 输出测试报告

作用:

  • 检查系统是否符合需求

5)上线运维

内容:

  • 部署项目

  • 配置服务器环境

  • 正式运行维护

作用:

  • 让系统对外提供服务


2. 角色分工

常见岗位及职责:

角色对应阶段职责
项目经理全阶段任务分配、进度把控
产品经理需求分析需求调研、原型设计
UI设计师设计页面效果图设计
架构师设计技术选型、架构设计
开发工程师编码功能实现
测试工程师测试测试用例、测试报告
运维工程师上线运维环境搭建、项目部署

重点:

  • 开发工程师主要负责编码实现

  • 实际项目中,一个人可能兼任多个角色


3. 软件环境

开发中常见三种环境:

1)开发环境 development

  • 程序员开发时使用

  • 一般在本地或局域网

  • 外部用户无法访问

2)测试环境 testing

  • 给测试人员测试使用

  • 部署到测试服务器

  • 外部用户一般无法访问

3)生产环境 production

  • 正式上线环境

  • 给真实用户使用

  • 要求稳定、安全、高可用


三、苍穹外卖项目介绍

1. 项目简介

苍穹外卖是一个餐饮企业定制的软件产品,分为两部分:

1)管理端

使用者:

  • 餐饮企业内部员工

主要功能:

  • 员工登录/退出

  • 员工管理

  • 分类管理

  • 菜品管理

  • 套餐管理

  • 订单管理

  • 数据统计

  • 来单提醒

2)用户端

使用者:

  • 消费者

主要功能:

  • 微信登录

  • 地址管理

  • 浏览分类和菜品

  • 购物车

  • 下单

  • 支付

  • 历史订单查询


2. 产品原型

产品原型的作用:

  • 展示业务功能

  • 展示页面布局和交互逻辑

  • 不是最终页面效果图

项目中有两份原型:

  • 管理端原型图

  • 用户端原型图


3. 技术选型

项目从 4 层来理解:

1)用户层

  • H5

  • Vue.js

  • ElementUI

  • ECharts

  • 微信小程序

2)网关层

  • Nginx

作用:

  • 静态资源部署

  • 反向代理

  • 负载均衡

3)应用层

  • SpringBoot

  • SpringMVC

  • Spring Task

  • HttpClient

  • Spring Cache

  • JWT

  • 阿里云 OSS

  • Swagger / Knife4j

  • POI

  • WebSocket

4)数据层

  • MySQL

  • Redis

  • MyBatis

  • PageHelper

  • Spring Data Redis

5)工具

  • Git

  • Maven

  • JUnit

  • Postman


四、开发环境搭建

开发环境包括两部分:

  1. 前端环境

  2. 后端环境


1. 前端环境搭建

步骤

  1. 从资料中找到 nginx

  2. 放到非中文目录

  3. 双击nginx.exe启动

  4. 访问:
    http://localhost:80

说明

  • sky目录中存放的是管理端前端资源

  • 前端页面通过 nginx 提供访问


2. 后端环境搭建

2.1 熟悉项目结构

后端基于 Maven 构建,采用分模块开发。

项目模块

模块名作用
sky-take-out父工程,统一管理依赖
sky-common公共模块,工具类、常量、异常等
sky-pojo实体类、DTO、VO 等
sky-server后端服务模块,Controller、Service、Mapper、配置类等

2.2 各模块作用

sky-common

常见包:

  • constant:常量类

  • context:上下文类

  • enumeration:枚举类

  • exception:自定义异常

  • json:JSON处理

  • properties:配置属性类

  • result:统一返回结果

  • utils:工具类

sky-pojo

常见包:

  • entity:实体类,对应数据库表

  • DTO:数据传输对象

  • VO:视图对象

  • POJO:普通 Java 对象

sky-server

常见包:

  • config:配置类

  • controller:控制层

  • interceptor:拦截器

  • mapper:持久层接口

  • service:业务层

  • SkyApplication:启动类


2.3 Git 版本控制

主要流程:

1)创建本地仓库

在 IDEA 中初始化 Git 仓库

2)创建远程仓库

在 Gitee 新建仓库

3)推送代码到远程仓库

步骤:

  • 先提交到本地仓库

  • 添加远程仓库地址

  • push 推送

注意:

  • 要忽略不需要提交的文件


2.4 数据库环境搭建

步骤

  1. 找到sky.sql

  2. 直接执行 SQL 文件

  3. 自动创建数据库和表

结果

共创建 11 张表:

表名中文名
employee员工表
category分类表
dish菜品表
dish_flavor菜品口味表
setmeal套餐表
setmeal_dish套餐菜品关系表
user用户表
address_book地址表
shopping_cart购物车表
orders订单表
order_detail订单明细表

2.5 前后端联调

初始工程已经实现了登录功能,可以直接联调测试。

登录功能调用链

Controller 层

EmployeeController

  • 接收前端登录请求

  • 调用 service 查询员工信息

  • 登录成功后生成 JWT

  • 返回EmployeeLoginVO

Service 层

EmployeeServiceImpl
主要逻辑:

  1. 根据用户名查询员工

  2. 判断员工是否存在

  3. 判断密码是否正确

  4. 判断账号是否被禁用

  5. 返回员工对象

Mapper 层

EmployeeMapper

  • 通过用户名查询员工信息


2.6 nginx 反向代理和负载均衡

1)为什么前端能访问到后端?

前端请求地址:
http://localhost/api/employee/login

后端真实地址:
http://localhost:8080/admin/employee/login

中间靠nginx 反向代理实现转发。


2)nginx 反向代理

作用

  • 提高访问速度

  • 隐藏后端服务地址

  • 保证后端安全

  • 为负载均衡做准备

核心配置

location /api/{
proxy_pass http://localhost:8080/admin/;
}

含义:

  • 访问/api/开头的请求

  • nginx 转发到http://localhost:8080/admin/

所以:
/api/employee/login
最终会被转到:
/admin/employee/login


3)nginx 负载均衡

当后端部署成集群时,nginx 可把请求分配到多台服务器。

基本配置

upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
location /api/{
proxy_pass http://webservers/admin;
}

常见负载均衡策略

  • 轮询:默认

  • weight:按权重分配

  • ip_hash:按客户端 IP 分配

  • least_conn:优先给连接数少的服务器

  • url_hash:相同 URL 到同一台服务器

  • fair:按响应时间分配


2.7 完善登录功能

问题

员工表中的密码是明文存储,不安全。

解决方案

  • 将密码改为密文存储

  • 使用MD5进行加密

修改点

1)数据库中密码改成 MD5 密文
2)Java 代码中,登录时将用户输入密码先做 MD5 再比较

示例逻辑:

password = DigestUtils.md5DigestAsHex(password.getBytes());
if (!password.equals(employee.getPassword())) {
throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
}

目的

提升账号密码安全性


五、导入接口文档

1. 前后端分离开发流程

标准流程:

  1. 先定义接口

  2. 前后端并行开发

  3. 前后端联调

  4. 提交测试

接口文档内容包括:

  • 请求路径

  • 请求方式

  • 请求参数

  • 返回参数


2. 导入 YApi

步骤

  1. 找到课程提供的接口 JSON 文件

  2. 访问 YApi 平台

  3. 创建两个项目:

    • 管理端接口项目

    • 用户端接口项目

  4. 分别导入对应 JSON 文件

作用

  • 管理和维护接口定义

  • 方便前后端协作开发


六、Swagger / Knife4j

1. Swagger 作用

Swagger 是生成和管理 RESTful 接口文档的工具。

主要作用:

  1. 自动生成在线接口文档

  2. 方便前后端协作

  3. 可直接测试接口

实际开发中一般使用:

  • Knife4j,它是 Swagger 的增强版


2. 使用步骤

1)引入依赖

pom.xml中加入:

<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>

2)配置 Docket

WebMvcConfiguration.java中配置:

@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();

return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
}

3)配置静态资源映射

否则无法访问文档页面:

protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

4)访问测试

访问地址:

http://localhost:8080/doc.html


3. Swagger 常用注解

注解作用
@Api标注在类上,说明类作用
@ApiModel标注在类上,说明数据模型
@ApiModelProperty标注在属性上,说明属性含义
@ApiOperation标注在方法上,说明接口用途

4. 示例说明

DTO 示例

EmployeeLoginDTO

  • 描述员工登录时传递的数据模型

  • 包含:

    • username

    • password

VO 示例

EmployeeLoginVO

  • 描述员工登录返回的数据格式

  • 包含:

    • id

    • userName

    • name

    • token

Controller 示例

EmployeeController

  • @Api(tags = "员工相关接口")

  • @ApiOperation("员工登录")

  • @ApiOperation("员工退出")

这样生成出来的接口文档更清晰、更易读。


七、YApi 和 Swagger 的区别

这是一个很重要的面试点。

YApi(已经是新的网址,可以自行搜索或者直接使用Swagger)

  • 用于设计阶段

  • 管理和维护接口

  • 更偏向团队协作和接口约定

Swagger / Knife4j

  • 用于开发阶段

  • 根据代码自动生成文档

  • 方便开发人员调试接口

结论

两者不是替代关系,而是互补关系。


八、Day01 核心重点总结

这节课最需要掌握的内容:

1. 软件开发流程

  • 需求分析

  • 设计

  • 编码

  • 测试

  • 上线运维

2. 苍穹外卖项目结构

  • 管理端

  • 用户端

  • 技术选型

  • 模块划分

3. 后端工程模块

  • sky-common

  • sky-pojo

  • sky-server

4. 数据库

  • 执行sky.sql

  • 了解 11 张表的作用

5. 登录功能

  • Controller / Service / Mapper 三层调用

  • JWT 令牌生成

  • MD5 密码加密

6. nginx

  • 反向代理

  • 负载均衡

  • 常见策略

7. 前后端分离

  • 先定义接口

  • 再并行开发

  • 然后联调测试

8. Swagger / Knife4j

  • 自动生成接口文档

  • 常用注解

  • 与 YApi 的区别


九、适合背诵的简版

1. 软件开发的五个阶段

需求分析、设计、编码、测试、上线运维。

2. 三种环境

开发环境、测试环境、生产环境。

3. 苍穹外卖分为哪两端

管理端和用户端。

4. 后端工程有哪些模块

sky-common、sky-pojo、sky-server,另有父工程 sky-take-out。

5. 登录功能的执行流程

Controller 接收请求 → Service 处理业务 → Mapper 查询数据库 → 登录成功后生成 JWT 返回前端。

6. 为什么使用 nginx

做反向代理、提高访问速度、隐藏后端地址、实现负载均衡。

7. 为什么要对密码做 MD5

避免明文存储,提高安全性。

8. YApi 和 Swagger 区别

YApi 用于接口设计和管理;Swagger/Knife4j 用于开发阶段自动生成接口文档和测试接口

http://www.jsqmd.com/news/509374/

相关文章:

  • 零基础掌握PowerShell脚本编译:Win-PS2EXE可视化工具全指南
  • 【独家首发】MCP 2.0 2026安全白皮书未公开附录A:NIST SP 800-193兼容性测试失败TOP5根因及热修复补丁(限首批200名开发者领取)
  • QMC音乐解密工具:让加密音频文件重获自由的实用指南
  • 4个方面带你掌握EB Garamond 12开源复古字体的全面应用
  • DIVERSEVUL数据集详解:为什么它是目前最全面的漏洞检测数据集?
  • InternLM2-Chat-1.8B赋能Java开发:面试题解析与八股文知识库构建
  • ESP32 IDF5 HTTPS服务器:轻量级嵌入式Web服务开发指南
  • 免费无限生成!Asian Beauty Z-Image Turbo本地化部署与使用全解析
  • ComfyUI-KJNodes插件实战指南:AI工作流优化的终极解决方案
  • 飞阁回澜:青岛栈桥,一座城市的百年守望
  • 卷积神经网络原理与PyTorch实现:环境准备到模型训练
  • AI工程进入Harness时代:新范式核心技术深度解析(非常详细),从入门到精通,收藏这一篇就够了!
  • 自动驾驶中的点云处理:PointPillars算法详解与KITTI数据集实战
  • LongCat-Image-Edit V2案例分享:如何用一句话给图片换主体、加文字
  • 调参实战:在PyTorch和TensorFlow里,epoch、batch size和iterations到底怎么设?看损失曲线说话
  • oss自定义域名+cdn跨域问题解决
  • 2026年电容器厂家最新推荐:高压动态无功补偿发生装置/高压无功补偿/高压电力电容器/高压电容器/选择指南 - 优质品牌商家
  • OctoPrinter:Arduino轻量级OctoPrint通信库
  • Linux设备驱动核心接口函数体系详解
  • ColorsUtils嵌入式RGB色彩处理库深度解析
  • 2026年时序分类综述论文阅读
  • Pixel Dimension Fissioner实战落地:政务公开文案亲和力提升裂变方案
  • 手机号查QQ号终极指南:3分钟找回遗忘的QQ账号
  • 墨语灵犀入门必看:33语种语言识别(LID)模块与翻译路由决策逻辑
  • MATLAB求导实战:从符号计算到数值微分的完整指南(附源码)
  • 降低90%资产流失率:Snipe-IT开源解决方案的全生命周期管理创新方法
  • 003 TimeTagger 时间跟踪工具本地部署与开机自启
  • 3个维度解析:SMUDebugTool从硬件调试入门到性能调校大师
  • 突破平台壁垒:Palworld存档修复工具实现跨平台迁移的完整解决方案
  • 2026年专科毕业论文降AI工具推荐:简单好用门槛低