(可以参考讲义,讲义比较详细)
一、SpringBoot简介
SpringBoot核心功能:
- 起步依赖:
- 自动配置:
二、SpringBoot快速入门
(此处是用没有骨架的maven创建)
1、简单的演示:
①pom.xml引导类
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--springBoot要求:所有项目工程都要继承起步依赖spring-boot-starter-parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_Test01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--以功能为单位的依赖,而不是具体某个包-->
<!--SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
②引导类
@SpringBootApplication //标记了此类为引导类
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class);//启动引导页
}
}
- @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析)
- SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象
成功启动后,控制台输出:
访问ip:8080页面:
(因为我们没有定义页面就报404了,但是这样可以验证我们的springboot可以正常启动了)
③我们再定义1个Controller
什么都不用配置,直接定义Controller给注解就行。
@Controller
public class QuickStartController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "你好,SpringBoot!";
}
}
输出:
你好,SpringBoot!
2、快速入门解析
①热部署
为什么要配置热部署?
当我们在项目启动的之时,修改了代码,我们就不需要重启项目了。
怎么配置热部署?
pom.xml配置:
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
但是,当你尝试着去测试的时候就会失败,为什么?
因为IDEA工具默认不支持自动编译! 所以,需要我们设置一下IDEA:
②使用idea快速创建SpringBoot项目
三、SpringBoot原理分析
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
-----------------------------------------------------------------------
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
所有的项目工程都继承这个org.springframework.boot
起步依赖,这个依赖的爸爸是org.springframework.boot
他们主要是导入了一些jar包,和版本锁定。
主要到导入了关于web的jar包,比如:sprngMVC、tomcat、json…
<!--web-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
从上面的spring-boot-starter-dependencies的pom.xml中我们可以发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步**依赖的作用**就是**进行依赖的传递。**p </dependency>
从上面的spring-boot-starter-dependencies的pom.xml中我们可以发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递。
springboot配置了一些默认的配置,如果你需要修改配置,就用自定义配置文件覆盖它。
比如:springBoot内置的tomcat配置是8080,没有虚拟路径,也就是“/”。
那么我现在我想改变Tomcat的访问端口是8081,访问的虚拟路径是/demo,那么我怎么设置呢?
(他会默认扫resource下的配置文件)
四、SpringBoot配置文件
1、yml简介
springBoot支持:yml(yaml)、properties配置文件。
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式
好处:
- 1、电脑容易识别
- 2、读者容易识别
- 3、编程语言之间的通用性,容易与脚本语言交互
- 4、配置时,只关注配置数据。(xml附带过多的标签)
优选级:
查看起步依赖代码可知,springBoot读取配置文件的顺序:
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
如果配置文件配置的数据出现重复,后者会覆盖前者。
2、yml语法
注意:
yml是以key-value的形式进行表示的。它跟json的格式差不多。
- key:
key前面的空格(缩进)是不限定的,可以加也可以不加。SpringBoot是根据空格(缩进)的多少,来判断key与key之间的层级关系的:如果多个key之间前面的空格(缩进)是一样是,表示它们是同级关系;如果不一样,就是包含关系,。- value:
value的前面一定要有1个空格。
下面来演示一下:普通数据、对象数据、数组(List、Set)、Map:
1、普通数据
格式:
key: value
name: LiZhiXi
2、对象数据
格式1:
key:
key: value1
key: value2
演示:
Person:
name: LiZhiXi
age: 20
--------------------------------------
格式2:
key: {key1: value1,key2: value2}
演示:
Student: {name: LiZhiXi,age: 20}
3、数组(List、Set)
格式:
①普通字符串
key:
- value1
- value2
或者
key: [value1,value2]
②对象
key:
- key01: value01
key02: value02
- key03: value03
key04: value04
其中:
- key01: value01
key02: value02
代表1个对象
--------------------------------
演示:
①
man:
- LiZhiXi
- 20
man: [LiZhiXi,20]
②
coder:
- name: LiZhiXi
age: 20
- name: LiuDeHua
age: 50
4、Map(同对象一样)
格式:
key:
key01: value01
演示:
coder:
name: LiZhiXi
age: 20
3、配置文件与配置类的属性映射方式
SpringBoot获取配置文件的数据时,它只分得请它自己规定键值对数据(你要要覆盖的数据),它分不清你自己自定义的键值对,所以你要自己引入
①@Value
@Value(“${key / 对象.key}”)
好处: 精准的注入属性值
坏处: 需要自己频繁加入注解
演示:
yml配置文件
#普通字符串
name: LiZhiXi
#对象
person:
age: 20
Controller
@Controller
public class ValueDemo {
@Value("${name}")
private String name;
@Value("${person.age}")
private String age;
@RequestMapping("/value")
@ResponseBody
public String value(){
return "name:"+name+",age:"+age;
}
}
输出:
name:LiZhiXi,age:20
② @ConfigurationProperties
@ConfigurationProperties(prefix=“配置文件中的key的前缀”):可以将配置文件中的配置数据自动与实体进行映射
好处:
不需要频繁加注解
注意:
使用这个注解,被注入的字段必须提供get/set方法
演示:
yml:
person:
age: 20
name: LiZhiXi
contoller:
@Controller
@ConfigurationProperties(prefix = "person")
public class ValueDemo2 {
private String name;
private String age;
@RequestMapping("/value2")
@ResponseBody
public String value(){
return "name:"+name+",age:"+age;
}
//此处省略grt/set方法
}
输出结果:
执行成功!但是,你会发现,你的IDEA会提示:
它提示找不到@ConfigurationProperties的执行器
,你没有配置。
不是可以映射么?为什么还要配置?
五、SpringBoot整合其它技术
①Mybatis
1、创建SpringBoot项目工程
2、配置pom.xml
①添加Mybatis的起步依赖(springBoot提供)
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
②添加数据库驱动坐标(mybatis提供)
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3、添加数据库连接信息
在application.properties中添加数据量的连接信息
#配置数据库信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
4、创建数据库+实体类
5、编写Mapper
在src\main\resources\mapper路径下加入UserMapper.xml配置文件"
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
注意: @Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
6、在application.properties中添加mybatis的信息
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.itheima.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
②Junit
1、pom.xml
IDEA快速创建springBoot时一般都会导入,如果没有就导入:
<!--测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2、测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class MapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void test() {
List<User> users = userMapper.queryUserList();
System.out.println(users);
}
}