springboot的学习随笔

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注解自动注入,就可以使用
1.@MapperScan({“com.briup.mapper”})是在springboot的启动类上使用,表示扫描某个包下,或者几个包下的映射接口,自动为他们生成实现类。
2.@Mapper在某个映射接口上使用,表示将来为当前接口动态生成实现类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值