【苍穹外卖日记】Day1-环境搭建与apifox文档建立
目录
导入项目
编译项目
git
连接数据库
运行前端
端口被占用
问题描述:
数据库
Apifox文档导入
接口文档
POJO类和result重点回顾
1. 什么是 POJO 类?
苍穹外卖中的 POJO 分类
2. Result 统一返回结果
分页查询如何返回 Result
从今天开始记录苍穹外卖学习过程中的收获和遇到的问题。大致框架就是每天做的什么
导入项目
文档中提供了初始项目,
其中父工程是sky-take-out,三个子模块在pom.xml配置了parent属性。
编译项目
起初我编译一直不通过,看弹幕说是lombok版本的问题,在配置文件上修改了版本还是报错
把日志抛给gpt说是lombok的原因。后来去把jdk版本降成了jdk17,但是还是不行。最后又看了一些博客,发现是maven项目设置里jre版本的问题
git
在这里一直编译不通过有点恼火,改也没法改就用git回退到初始架构了。以后我们也会讲一讲git版本管理利器。
连接数据库
在这里需要把密码修改成自己的,记得把服务打开
运行前端
前端运行:
- nginx.exe需要放在没有中文 和空格的目录下 不然无法运行
- 配置好后直接双击就可以运行。在浏览器输入localhost:80 就可以访问到界面
端口被占用
问题描述:
开始时我访问不到界面 一直是iis服务界面 也就是这个端口被占用了,后来我去找了一些解除端口占用的方法。
第一种:在管理员命令行运行iisreset/stop
第二种:服务里关闭World Wide Web Publishing Service
之后再去访问界面就可以访问到前端渲染出来的界面了。
数据库
在文档中打开数据库构建源码,然后再集成环境或者idea插件里运行都ok。之后就能正常查询到表结构。
在这里其实我少做了一步,就是熟悉表之间的关系和表字段,导致我后面敲接口是有点懵。因为表结构没有物理外键,只有逻辑外键,需要自己在逻辑处理时思考表与表之间的关系。所以对表生疏的话还是有一点麻烦。
Apifox文档导入
1.首先我在apifox官网引入接口文档,选择yapi那个就可以导入
2.然后我在idea里下载了一个apifox的插件 它能直接识别出我写的新接口,相当智能
3.后续开发中我也用了一些接口调试,体验也是不错
可惜的是前后端联调太爽了,我都懒得用apifox了
接口文档
熟悉接口文档也是重要的一步,这有利于在开发时对表述层参数接受和返回有清晰的认识。
POJO类和result重点回顾
苍穹外卖的pojo类划分相当清晰
1. 什么是 POJO 类?
-
Plain Old Java Object:不依赖框架的普通 Java 对象。
-
特点:
-
只有属性和 getter/setter(必要时加上
toString
、equals
、hashCode
)。 -
不继承框架类,保证解耦。
-
主要作用:作为 实体类、VO(视图对象)、DTO(数据传输对象)、查询条件对象。
-
苍穹外卖中的 POJO 分类
-
实体类(Entity):与数据库表一一对应。
-
例:
User
、Dish
、Order
、Employee
等。 -
通常放在
entity
包里。 -
有
@TableName
、@TableId
(MyBatis-Plus)注解。
-
-
DTO(Data Transfer Object):数据传输对象,用来接收前端传过来的参数。
-
例:
UserLoginDTO
、DishDTO
、OrderSubmitDTO
。 -
可以避免直接暴露
Entity
,保证安全性。
-
-
VO(View Object):视图对象,用来返回给前端的数据。即前端需要什么就返回什么。
-
例:
DishVO
、OrderVO
。 -
往往是多表关联查询结果,或者拼接额外的字段。
-
2. Result 统一返回结果
为了让前后端交互的数据格式统一,项目里会有一个 Result<T>
泛型类。但这个类实际是在common模块下的,是一个公共的类。
package com.sky.result;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* @param <T>*/
@Data
public class Result<T> implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}}
Result<T>
中的data
可以是任何类型:单个对象(User
)、集合(List<Dish>
)、分页对象(PageResult<OrderVO>
)等。不需要为每种数据再写一个新的
ResultXXX
类。
分页查询如何返回 Result
分页查询通常会返回两类信息:
-
总记录数
-
当前页数据列表
所以通常会定义一个 分页结果对象(例如 PageResult
),再用 Result<PageResult<T>>
包。
在这里就能充分体会到泛型的好处了,它是统一返回结果必不缺少的工具!
学下去,向前!