1. 技术选型
1.1 用户层
系统管理后台前端页面用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术,移动端用到微信小程序。
1.2 网关层
Nginx是一个服务器,主要用来作为Http服务器,部署静态资源,访问性能高。在Nginx中还有两个比较重要的作用: 反向代理和负载均衡, 在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
1.3 应用层
SpringBoot: 快速构建Spring项目, 采用 “约定优于配置” 的思想, 简化Spring项目的配置开发。
SpringMVC:SpringMVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,可以无缝集成。
Spring Task: 由Spring提供的定时任务框架。
httpclient: 主要实现了对http请求的发送。
Spring Cache: 由Spring提供的数据缓存框架。
JWT: 用于对应用程序上的用户进行身份验证的标记。
阿里云OSS: 对象存储服务,在项目中主要存储文件,如图片等。
Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
POI: 封装了对Excel表格的常用操作。
WebSocket: 一种通信网络协议,使客户端和服务器之间的数据交换更加简单,用于项目的来单、催单功能实现。
1.4 数据层
MySQL: 关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。
Redis: 基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存。
Mybatis: 本项目持久层将会使用Mybatis开发。
pagehelper: 分页插件。
spring data redis: 简化java代码操作Redis的API。
1.5 工具
git: 版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。
maven: 项目构建工具。
junit:单元测试工具,开发人员功能实现完毕后,需要通过junit对功能进行单元测试。
postman: 接口测试工具,模拟用户发起的各类HTTP请求,获取对应的响应结果。
2. 开发环境说明
后端工程结构
| 序号 | 名称 | 说明 |
|---|---|---|
| 1 | sky-take-out | maven父工程,统一管理依赖版本,聚合其他子模块 |
| 2 | sky-common | 子模块,存放公共类,例如:工具类、常量类、异常类等 |
| 3 | sky-pojo | 子模块,存放实体类、VO、DTO等 |
| 4 | sky-sever | 子模块,后端服务,存放配置文件、Controller、Service、Mapper等 |
sky-common每个包的作用
| 名称 | 说明 |
|---|---|
| constant | 存放相关常量类 |
| context | 存放上下文类 |
| enumeration | 项目的枚举类存储 |
| exception | 存放自定义异常类 |
| json | 处理json转换的类 |
| properties | 存放SpringBoot相关的配置属性类 |
| result | 返回结果类的封装 |
| utils | 常用工具类 |
sky-pojo每个包的作用
| 名称 | 说明 |
|---|---|
| Entity | 实体,通常和数据库中的表对应 |
| DTO | 数据传输对象,通常用于程序中各层之间传递数据 |
| VO | 视图对象,为前端展示数据提供的对象 |
| POJO | 普通Java对象,只有属性和对应的getter和setter |
sky-server每个包的作用
| 名称 | 说明 |
|---|---|
| config | 存放配置类 |
| controller | 存放controller类 |
| interceptor | 存放拦截器类 |
| mapper | 存放mapper接口 |
| service | 存放service类 |
| SkyApplication | 启动类 |
sky_take_out11张表的说明
| 序号 | 表名 | 中文名 |
|---|---|---|
| 1 | employee | 员工表 |
| 2 | category | 分类表 |
| 3 | dish | 菜品表 |
| 4 | dish_flavor | 菜品口味表 |
| 5 | setmeal | 套餐表 |
| 6 | setmeal_dish | 套餐菜品关系表 |
| 7 | user | 用户表 |
| 8 | address_book | 地址表 |
| 9 | shopping_cart | 购物车表 |
| 10 | orders | 订单表 |
| 11 | order_detail | 订单明细表 |
3.代码开发
注解@RequestBody
@RequestBody 是 Spring MVC 框架中的一个重要注解,主要用于处理 HTTP 请求体中的内容,将其转换为 Java 对象。
支持的 Content-Type
- application/json (最常用)
- application/xml
- text/plain
- multipart/form-data
- @RequestBody 是 Spring MVC 中处理请求体的核心注解,它:
- 自动将 JSON/XML 转换为 Java 对象
- 支持复杂的数据结构和嵌套对象
- 与验证框架完美集成
- 提高了开发效率和代码可读性
掌握 @RequestBody 的使用对于开发现代 RESTful API 至关重要。
注解@Bean
@Bean 是 Spring 框架中的一个重要注解,用于方法级别的声明。它告诉 Spring 容器:”这个方法将返回一个对象,该对象应该被注册为 Spring 应用上下文中的 Bean。”
@Bean vs @Component
| 特性 | @Bean | @Component |
|---|---|---|
| 使用位置 | 方法级别 | 类级别 |
| 控制权 | 完全控制实例化过程 | 由 Spring 控制实例化 |
| 第三方库 | 适合配置第三方类 | 适合自己编写的类 |
| 灵活性 | 更高,可以包含复杂逻辑 | 相对简单 |
- 最佳实践
- 在 @Configuration 类中使用:确保 Bean 被正确代理
- 命名规范:使用明确的 Bean 名称
- 避免副作用:@Bean 方法应该是幂等的
- 合理使用条件注解:根据环境条件创建 Bean
- @Bean 注解是 Spring 框架中非常强大的工具,它提供了:
- 灵活的 Bean 定义方式
- 完整的实例化过程控制
- 方便的依赖管理
- 条件化 Bean 创建能力
- 第三方库集成支持
掌握 @Bean 注解的使用,能够让你更精细地控制 Spring 容器的行为,编写出更加灵活和可维护的应用程序。
Swagger
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是:
- 使得前后端分离开发更加方便,有利于团队协作
- 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
- 功能测试
Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。
常用注解
| 注解 | 属性 | 说明 |
|---|---|---|
| @Api | tags | 用在类上,例如Controller,表示对类的说明 |
| @ApiModel | description | 用在类上,例如entity、DTO、VO |
| @ApiModelProperty | - | 用在属性上,描述属性信息 |
| @ApiOperation | value | 用在方法上,例如Controller的方法,说明方法的用途、作用 |