欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot的学习随笔

程序员文章站 2022-04-19 19:08:36
...

SpringBoot:自动配置信息,减少配置文件的书写

SpringDate:持久层框架。Mybatis时一种半自动化的ORM框架(sql语句需要自己写),底层hibernate实现

SpringCloud:做架构的,微服务架构

第一天

SpringBoot项目的三种搭建方式:
在线搭建,去spring的官网,只要输入项目名,需要引入的启动器就会自动搭建并且提供下载到本地,然后导入到项目中
SpringBoot CLI搭建;CLI是一个命令行工具,需要下载后配置到系统环境中,在本地编写好程序,然后在控制台用命令行直接就可以运行,跳过了部署到服务器等步骤,快速原型开发
sts开发工具搭建,右键新建Spring Starter Project项目即可

约定优于配置
我们把@SpringBootApplication注解加到一个类上,让这个类变成配置类也是程序的主入口,里面定义mian方法回调本类,让springboot识别到这个注解,开启自动配置的功能
与程序入口类同包或者子包的类都会被扫描到,不用我们额外配置;这就是事先约定的好处。如果不按照约定类在程序入口之上的包内,springboot就不会扫描

Starter 启动器
启动器是主要简化依赖的,以前的maven项目或其他项目中,如果需要其他jar包的依赖就必须自己找jar包导入项目或者在maven的pom文件中定义依赖坐标和版本,让maven帮我们下到仓库。当依赖很多时候,这个过程就会显得繁琐。
怎么简化呢?
在springboot中只需要引入一个starter即可,它可以把项目用到的依赖全部关联进来

  1. springboot默认的启动器为spring-boot-starter,spring-boot-starter-test;其中核心的启动器为spring-boot-starter,它包含了自动配置,日志,YAML

3.如果项目是专门的一个方向,也可更改相对应得启动器,比如spring-boot-starter-web,spring-boot-starter-redis,spring-boot-starter-aop等

springboot结合maven使用(springboot是一个特殊的项目)
在pom文件得bulid标签中配置spring-boot-maven-plugin插件,让springboot中可以使用maven得功能,运行,打包等

继承spring提供得项目
一般情况下建议使用标签继承spring提供得父项目,这样我们得项目中就可以得到额外的功能:比如java版本,项目编码,插件配置等

org.springframework.boot
spring-boot-starter-parent
1.5.17.RELEASE

2.如果不需要父类项目继承的功能,也可以自己覆盖:比如编码,java版本需要用自己合适的

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>

第二天
springboot的核心功能:自动配置

如上图:我们再执行一个测试类,它的执行过程会分为两部分
1.第一部分springboot会扫描入口同包或者子包下的配置类,将对象交给容器,关联类对象
2.第二部分扫描框架自带的类,并把他们关联过来

在我们没有做其他额外配置的情况下:
1.Springboot 测试类为什么能启动 springboot 的入口类?
因为约定由于配置,springboot默认会扫描与测试类同包或者子包去找入口类,入口类上会加上@SpringBootApplication注解,然后执行类中的main方法,方法中会回调当前类,这样就可以识别类上的注解,然后开启自动配置等功能,最后再执行测试类

2.Springboot 入口类为什么能读取到我们的 JavaConfig 类和其他框架的 JavaConfig?
这就是因为前面我们所提到的----约定优于配置,同包或子包下面的配置类可以被自动扫描到并读取。
首先:
什么是javaConfig类?
在我们以前的spring或者springMVC框架中,管理对象的生命周期,管理对象的关联关系有两种方式
1.bean形式,在xml配置文件中配置
2.annotation 注解的形式,在需要的类和对象上加上对应的注解,但最后必须要xml配置文件中,配置标签通知框架容器去识别这些注解

但是现在在springboot框架中,它的要求就是我们不需要写xml配置文件,springboot也能帮我们识别注解,帮我们管理关系将对象放在容器中,前提是遵守一定的约定,就是把需要配置的类写在入口类的同包或者子包下,springboot默认才会扫描.
第三种方式:配置javaConfig配置类,加上对应的注解。
//相当于以前xml配置文件
@Configuration
public class AppConfig {

//方法的返回值就是将来放在容器的bean对象,名字就为方法名
@Bean
public User user() {
	return new User();
}

//
@Bean
public Group group() {
	return new Group();
}

再者:
其他框架的javaConfig,springboot怎么帮我们自动扫描到的,而且其他框架的资源一般不会与入口类同包,不能自动扫描到。
也就是原先我们在spring框架中,只用配置class路径的bean对象,因为是spring自带的对象,我们想用的时候就声明出来。
但是在springboot中不同写xml配置文件,我们要用的时候,springboot怎么会帮我们自动配置,或者我们怎么告诉springboot我们要用这个类?

解决:
SpringBoot 中的框架自动配置 :
当前我们在 springboot 项目中引入一个框架的时候,例如 springmvc 框架,我们不几
乎不需要做任何配置,就可以使用到 springmvc 中的功能并且成功运行,这就是因为引
入 springmvc 框架后,springboot 就已经自动帮我们把这个框架都默认配置好了。
如何实现的自动配置:
整体思路是这样的,常用框架对应的 JavaConfig 类都已经编写好了,springboot 启动
的时候会一个一个的进行读取,但是读取的时候会先根据条件进行判断,看是否需要真的
读取该配置类去配置对应的框架。所以,关键的一点在于,每个配置类中,都可以添加条
件注解,来判断是否满足某一个条件,从而决定是否读取该配置类。
具体流程如下 :
1. 程序入口类上使用@SpringBootApplication 注解
2. @SpringBootApplication 注解又包含了@EnableAutoConfiguration 注解
3. @EnableAutoConfiguration
注解又导入(@Import)了 EnableAutoConfigurationImportSelector 类
4. EnableAutoConfigurationImportSelector
类的父类 AutoConfigurationImportSelector 中,
定义了一个方法 getCandidateConfigurations
5. getCandidateConfigurations 方法可以扫描 spring.factories 文件中的配置
6. spring.factories 文件在
spring-boot-autoconfigure-1.5.17.RELEASE.jar 的 META-INF 中
7. spring.factories 文件中声明了很多 java 配置类,但是每个配置类都是需要满足一
定的条件才会执行(例如:@ConditionalOnClass、@ConditionalOnProperty 等)

最后我们使用框架提供的类,只需要在springboot的application.properties文件中开启使用即可
my.service.hello.enabled=true
spring.application.admin.enabled=true

第三天 springboot与mybatis,jdbc结合
1.与jdbc结合
springboot中使用JdbcTemplate类,来对jdbc编程提供支持。

首先,在以前spring中要使用JdbcTemplate类,必须以bean的形式配置到容器中,而且使用的前提也必须给它注入dataSource数据源。

在springboot中,因为在启动器中就引入了很多spring的jar包,所以在运行入口类时,springboot就已经把JdbcTemplate类实例化好了
此时我们需要的做的就是把数据源在application.properties配置文件中配好,让框架自动帮我们注入
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

2.与mybatis结合
主要是通过注解和配置文件
核心jar包



org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2

第一步:在application.properties文件中,配置数据源,sql映射文件等
#配置数据源到容器,spring会帮我们自动放在需要数据源的类中
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root

mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.briup.bean

如果需要,可以执行指定的sql文件进行建表

spring.datasource.schema=sql/test.sql

第二步:编写sql映射文件,在命名空间配置映射接口的全包名

<?xml version="1.0" encoding="UTF-8" ?>
<sql id="Base_Column_List" >
    id, name, age, gender
</sql>

<select id="getAll" resultMap="BaseResultMap"  >
   SELECT 
   <include refid="Base_Column_List" />
   FROM t_user
</select>

<select id="getOne" parameterType="long" resultMap="BaseResultMap" >
    SELECT 
   <include refid="Base_Column_List" />
   FROM t_user
   WHERE id = #{id}
</select>

第三步:@MapperScan({“com.briup.mapper”})注解和@Mapper注解
首先这两个注解都是用来扫描映射接口的,默认是以接口类名首字母小写,将来动态生成实现类放在容器中,通过@Autowired注解自动注入,就可以使用
[email protected]({“com.briup.mapper”})是在springboot的启动类上使用,表示扫描某个包下,或者几个包下的映射接口,自动为他们生成实现类。
[email protected]在某个映射接口上使用,表示将来为当前接口动态生成实现类