You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
5.9 KiB
222 lines
5.9 KiB
|
3 years ago
|
# 架构学习笔记
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
基础知识:
|
||
|
|
|
||
|
|
了解Bean及其使用;
|
||
|
|
|
||
|
|
了解容器及其使用;
|
||
|
|
|
||
|
|
了解事务及其使用;
|
||
|
|
|
||
|
|
了解框架的注解及其使用;
|
||
|
|
|
||
|
|
了解框架的插件及其使用;
|
||
|
|
|
||
|
|
了解框架的AOP概念及其使用;
|
||
|
|
|
||
|
|
了解框架的MVC模式及其作用和使用;
|
||
|
|
|
||
|
|
了解Restful的使用和作用;
|
||
|
|
|
||
|
|
了解SSM模式及其整合和使用;
|
||
|
|
|
||
|
|
了解框架的拦截器和使用;
|
||
|
|
|
||
|
|
了解Maven的作用和开发中的用法;
|
||
|
|
|
||
|
|
了解MybatisPlus的知识和使用;
|
||
|
|
|
||
|
|
学习框架外的知识;
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Bean
|
||
|
|
|
||
|
|
bean是框架中的一个概念。就是将传统中的实例化的操作所抽象出来的一个专业词语。
|
||
|
|
其作用是将项目中的类进行一个自动化的实例化出来的一个对象东西。
|
||
|
|
|
||
|
|
比如:
|
||
|
|
|
||
|
|
```java
|
||
|
|
public class Uses {
|
||
|
|
private Integer id;
|
||
|
|
private String number;
|
||
|
|
private Integer iphone;
|
||
|
|
private String workType;
|
||
|
|
private String loginDate;
|
||
|
|
private Integer loginNumber;
|
||
|
|
|
||
|
|
public Integer getId() {
|
||
|
|
return id;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setId(Integer id) {
|
||
|
|
this.id = id;
|
||
|
|
}
|
||
|
|
|
||
|
|
public String getNumber() {
|
||
|
|
return number;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setNumber(String number) {
|
||
|
|
this.number = number;
|
||
|
|
}
|
||
|
|
|
||
|
|
public Integer getIphone() {
|
||
|
|
return iphone;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setIphone(Integer iphone) {
|
||
|
|
this.iphone = iphone;
|
||
|
|
}
|
||
|
|
|
||
|
|
public String getWorkType() {
|
||
|
|
return workType;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setWorkType(String workType) {
|
||
|
|
this.workType = workType;
|
||
|
|
}
|
||
|
|
|
||
|
|
public String getLoginDate() {
|
||
|
|
return loginDate;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setLoginDate(String loginDate) {
|
||
|
|
this.loginDate = loginDate;
|
||
|
|
}
|
||
|
|
|
||
|
|
public Integer getLoginNumber() {
|
||
|
|
return loginNumber;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setLoginNumber(Integer loginNumber) {
|
||
|
|
this.loginNumber = loginNumber;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
这里的代码中我省略了构造方法,无关紧要。但这通过框架所实例化出来的对象就是叫Bean。
|
||
|
|
|
||
|
|
bean本质上就是一个对象,不过是以抽象的概念来表达出来。
|
||
|
|
|
||
|
|
它的作用是可以让我们对它里面的getter和setter方法进行操作,这样就可以处理这个对象下所存放的数据。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 容器
|
||
|
|
|
||
|
|
框架中一个可以存放Bean对象的地方。
|
||
|
|
|
||
|
|
我们可以通过这个地方获取我们所实例化好的对象【Bean】。
|
||
|
|
|
||
|
|
它的实现方式有以下:
|
||
|
|
|
||
|
|
1. 通过**ClassPathXmlApplicationContext**类来实现。
|
||
|
|
2. 通过**FilesystemPathApplication**函数来实现。
|
||
|
|
3. 通过注解的方式来实现。
|
||
|
|
4. 通过**AnnotationConfigApplicationContext**类来实现。
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 事务
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
----
|
||
|
|
|
||
|
|
### 注解
|
||
|
|
|
||
|
|
这里我们学习注解,在学习前,我们这里回顾第一节的知识点。第一节学习了Bean,那么在第一节中介绍了有通过注解的形式来将Bean注入到框架中。然后调用它 。
|
||
|
|
|
||
|
|
但是我们应该以什么格式的去注入呢?
|
||
|
|
|
||
|
|
答:通过@Component的注解来进行注入。
|
||
|
|
|
||
|
|
通过@Component的注解将一个类注入到框架的容器中,然后我们就可以在主函数中通过容器【Application Context】来进行get Bean,这样就可以获取到了我们注入到容器里的bean了。接着就可以定义一个bean类的变量来接收这个对象。从而使用这个对象里面的方法。
|
||
|
|
|
||
|
|
另外一种bean的注解是@Bean。这种Bean是用来注解到方法中,这个方法返回值是一个Bean对象。如果在注解中添加名字,该名字就是Bean的名字。在主函数中就可以获取到并使用它。
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
框架外的知识:
|
||
|
|
|
||
|
|
VO、DTO、Entity、PO、POJO等相关知识:
|
||
|
|
|
||
|
|
1、entity 里的每一个字段,与[数据库](https://cloud.tencent.com/solution/database?from=10680)相对应,
|
||
|
|
|
||
|
|
2、vo 里的每一个字段,是和你前台 html 页面相对应,
|
||
|
|
|
||
|
|
3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。
|
||
|
|
|
||
|
|
举个例子:
|
||
|
|
|
||
|
|
你的html页面上有三个字段,name,pass,age
|
||
|
|
|
||
|
|
你的数据库表里,有两个字段,name,pass , 注意没有 age。
|
||
|
|
|
||
|
|
而你的 vo 里,就应该有下面三个成员变量 ,因为对应 html 页面上三个字段 。
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
private string name;
|
||
|
|
|
||
|
|
private string pass;
|
||
|
|
|
||
|
|
private string age;
|
||
|
|
```
|
||
|
|
|
||
|
|
复制
|
||
|
|
|
||
|
|
这个时候,你的 entity 里,就应该有两个成员变量 ,因为对应数据库表中的 2 个字段 。
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
private string name;
|
||
|
|
|
||
|
|
private string pass;
|
||
|
|
```
|
||
|
|
|
||
|
|
复制
|
||
|
|
|
||
|
|
到了这里,好了,业务经理让你做这样一个业务“年龄大于 20 的才能存入数据库,这个时候,你就要用到 dto 了,
|
||
|
|
|
||
|
|
1)你要先从页面上拿到 vo,然后判断 vo 中的 age 是不是大于 20。
|
||
|
|
|
||
|
|
2)如果大于 20,就把 vo 中的 name 和 pass 拿出来,放到 dto 中。
|
||
|
|
|
||
|
|
3)然后在把 dto 中的 name 和 pass 原封不动的给 entity,然后根据 entity 的值,在传入数据库。
|
||
|
|
|
||
|
|
这就是他们三个的区别。
|
||
|
|
|
||
|
|
PS: dto 和 entity 里面的字段应该是一样的,dto 只是 entity 到 vo,或者 vo 到 entity 的中间过程,如果没有这个过程,你仍然可以做到增删改查,这是根据具体公司规范来的 。
|
||
|
|
|
||
|
|
层级之间的数据转换框架:
|
||
|
|
|
||
|
|
Java中比较流行的自动化转换代码的工具有以下几个:
|
||
|
|
|
||
|
|
1. MapStruct:MapStruct是一个代码生成器,可以基于注释或接口来自动生成DTO和Entity之间的转换代码。它的主要功能包括自动转换复杂对象和集合、支持多种映射方式等。
|
||
|
|
2. ModelMapper:ModelMapper是一个开源库,可以用来轻松地进行DTO和Entity之间的转换。它支持自定义转换规则和类型转换器、自动忽略 null 值,方便易用。
|
||
|
|
3. Dozer:Dozer是另一个开源转换库,可以自动转换两个类之间的属性。它支持通过XML或者API配置映射规则,使用起来很方便。
|
||
|
|
|
||
|
|
Jwt :
|
||
|
|
|
||
|
|
由三部分组成:Header、Payload、Signature
|
||
|
|
|
||
|
|
Header 表示这个token是由哪些编码和类型。
|
||
|
|
|
||
|
|
Payload 表示用户的载体用来加密用户的名字和权限
|
||
|
|
|
||
|
|
Signature 表示加密的方式和加密前两部分。
|
||
|
|
|