后台架构的学习
1.项目蓝图
2.项目的整体结构
3.物理模型图设计
开发项目的时候先梳理业务逻辑、建库、建表,设计表之间的关联。
3.1传统的数据库的问题
传统的数据库视图的查看方式,即在cmd命令行中查看数据库的表,以此来查看数据库中的表与表之间的管理关系式看不出来的。所以要设计物理模型图
3.2设计物理模型图
通过软件(例如PowerDesigner)来规划表与表的关系,将表与表的关系通过视图的形式直观的展示出来,快速了解项目的业务流程。例如下图
举例说明:顺着物理模型图的设计,当需要通过商品的分类来找出商品的描述的时候,首先通过商品分类表中的ID找到商品再找到商品描述。
再比如要通过用户找出订单的物流,顺着物理模型图,想通过用户找到订单,然后再通过订单找到相应的订单物流。
4.SpringBoot框架中pom.xml中的标签
4.1parent标签的作用
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
jar包的种类繁多,一个jar包会去依赖其它的jar。早期的maven项目需要一个一个的去指定依赖的jar包,还需要指定jar包的版本,若是一个jar包的版本更新了,需要手动的去修改版本。这样很容易出现的jar冲突的问题。
采用parent标签的方式,统一定义了jar包的版本号,由官方自己进行测试,将能够稳定运行的版本进行统一管理。所以所以在依赖项中就不用再指定版本,在父级中就已经定义好了。例如spring,springmvc的版本。
4.2maven插件
<!--maven项目制定的插件配置 该插件主要负责maven项目相关操作 打包/test
等相关maven操作 注意事项:但凡是maven项目则必须添加插件,
否则将来项目部署必然出错
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4.3properties标签
<!--当前maven配置信息-->
<properties>
<java.version>1.8</java.version>
<!--定义maven插件的版本-->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<!--跳过测试类打包-->
<skipTests>true</skipTests>
</properties>
skipTests标签:当内容为true时,在进行项目打包时(maven install)将跳过测试类的打包即test目录下的各种测试类,项目发布的时候就不需要测试类了。
4.4 dependency标签
<!--maven的依赖 利用坐标的形式管理jar包 和本地仓库之间的是什么关系?-->
<dependency>
<!--组ID,公司域名倒写-->
<groupId>org.springframework.boot</groupId>
<!--具体项目的名称-->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号被parent标签提前定义了-->
<!--<version>2</version>-->
</dependency>
该jar包与本地仓库的关系是:本地仓库目录:\org\springframework\boot\spring-boot-starter-web
当下载jar包时,遇到maven依赖异常,首先去检查本地仓库中是否有该jar包的完整版本。若下载jar包出现网络不佳的情况,导致jar包下载失败,这时在本地仓库中该jar包的后缀为xxx.lastjar标明该jar包未下载完整,删除该jar包目录下所有文件,重新加载maven项目。
5.jar包与jar包之间的依赖关系是如何实现的(jar包的传递性)?
5.1maven具有jar的传递依赖性
例如:A.jar–>B.jar–>C.jar
A依赖于B,B依赖于C
在IDEA开发工具中点击maven导航栏,即可以查看当前项目的直接依赖项,如图有两个直接依赖项,分别是spring-boot-starter-web、spring-boot-starter-test,它们的版本已经由parent标签定义好了。展开直接依赖项,可以看到spring-boot-starter-web.jar包依赖的其它jar包。
5.2 那么是如何知道当前jar包要依赖哪些jar包呢?
进入到当前的jar包的目录下。打开如下文件
检查pom.xml文件。可以看出来当前的jar包也是一个maven项目。maven在加载了jar包后还会去加载该jar包的pom文件,如果该pom文件中依赖了其它的jar包,那么maven也会去加载这些jar包。
6.maven仓库的配置
6.1修改maven仓库的配置文件setting.xml
设置本地仓库的位置:
本地仓库的默认位置为${user.home}/.m2/repository
可以在localRepository标签中修改本地仓库的位置。
在mirrors标签中添加mirror标签,指定私服镜像,一般连接阿里云的私服镜像服务器(外部仓库),即从阿里云的服务器上下载jar包。不加mirror标签默认连接中央仓库,但是速度较慢。
本地仓库、外部仓库、中央仓库。每当加载jar包时,首先去本地仓库检查有没有该jar包,没有的情况下,当指定了外部仓库时会连接外部仓库(图中为阿里云),没有指定外部仓库(mirror标签)默认连接中央仓库去下载jar包。
7springboot项目的启动过程
7.1什么是开箱即用,springboot是如何实现开箱即用的?
如果需要引入第三方的"工具/功能",只需要经过少量的配置/或者不做任何配置.则就可以使用该功能.
<dependency>
<groupId>org.springframework.boot</groupId>
<!--springboot启动项 内部的jar包文件已经将配置准备完成,用户
只需要导入jar包就可以获取其功能
starter-web 直接引入了SpringMvc框架
传统mvc框架配置:
1.导入特定的jar包即版本
2.编辑web.xml配置dispatcherServlet 拦截路径
3.配置mvc的配置we年 包扫描 视图解析器
-->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号被parent标签提前定义了-->
<!--<version>2</version>-->
</dependency>
7.2 springboot程序的启动加载过程
@SpringBootApplication //标识项目一个springboot项目
public class SpringbootDemo1Application {
/**
* main方法是java程序的唯一入口
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo1Application.class, args);
}
}
SpringApplication.run(SpringbootDemo1Application.class, args);
调用的springboot.run这个API将启动类的类型(SpringbootDemo1Application.class)传入进去,启动类的名字可以随意更改。启动的时候要的类上的@SpringBootApplication注解。
7.2.1@SpringBootApplication注解
7.2.1.1元注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
7.2.1.2 @SpringBootConfiguration注解
作用:标识主启动类是一个大型的配置文件,启动时会加载所有的小的配置文件
@Configuration: 表示该类是一个配置类.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
在springboot项目中,会有很多的配置类,这些配置类都用@Configuration注解修饰,标明该类是一个配置类,在主启动类加载的时候,这些配置文件都会被加载。例如
@Configuration
public class Userconfig(){.....}
7.2.1.3@EnableAutoConfiguration注解
该注解下的两个注解:@AutoConfigurationPackage、@Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage
说明: 当程序启动时,会根据主启动类的包路径,扫描其子孙包,所以springboot以后写代码时应该在其子孙包下编辑.
@Import({AutoConfigurationImportSelector.class})
说明:该配置中内部集成了所有的SpringBoot中的选择器.这些选择器的主要的任务就是查看是否有自己选择器所管理的启动项的配置. 如果发现该启动项,那么选择器就会执行该启动项,从而实现了开箱即用的操作.
7.3 启动过程总结
所以在加载完启动项后,由@Import({AutoConfigurationImportSelector.class})注解中的选择器去执行启动项,从而实现了开箱即用。
8引入lombok插件
在pom.xml文件中加入依赖
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>