SpringBoot基础篇
一. SpringBoot快速入门
1.1创建SpringBoot工程
1. 手工创建
步骤①:创建工程时,选择手工创建Maven工程
 步骤②:参照标准SpringBoot工程的pom文件,书写自己的pom文件即可
- parent标签
 - springboot依赖
 
<?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>
	<!--继承父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!--springboot版本-->
        <version>2.5.4</version>
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>springboot_01_04_quickstart</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
 
步骤③:之前运行SpringBoot工程需要一个类,这个缺不了,自己手写一个就行了,建议按照之前的目录结构来创建,类名可以自定义,关联的名称一切修改即可
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(<Application.class,args);
    }
}
 
步骤④:下面就可以自己创建一个Controller测试一下
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        return "springboot is running...";
    }
}
 
@RestController与@GetMapping注解是基于Restful开发的典型注解
 步骤5:运行Application类
 步骤6:在浏览器输入http://localhost:8080/books
2. idea直接创建
步骤①:创建新模块,选择Spring Initializr,并配置模块相关基础信息
 
 最低要求为JDK8或以上版本,推荐使用8或11
步骤②:选择当前模块需要使用的技术集
 
 版本是2.5.4
步骤③:开发控制器类
 步骤④:运行自动生成的Application类
 1.运行:
 
 2.结果:tomcat服务器自动启动
 
 3.测试:浏览器内输入http://localhost:8080/books
 
3. 官网直接创建
- 官网:spring.io


然后会下载一个压缩文件,解压后导入idea 
4. 阿里云版创建

1.2教你一招:在Idea中隐藏指定文件/文件夹
步骤①:打开设置,【Files】→【Settings】
 步骤②:打开文件类型设置界面,【Editor】→【File Types】→【Ignored Files and Folders】,忽略文件或文件夹显示
 步骤③:添加你要隐藏的文件名称或文件夹名称,可以使用*号通配符,表示任意,设置完毕即可
二. SpringBoot简介
2.1 SpringBoot程序的功能及优点
- 起步依赖(简化依赖配置)
依赖配置的书写简化就是靠这个起步依赖达成的 - 自动配置(简化常用工程相关配置)
配置过于繁琐,使用自动配置就可以做响应的简化,但是内部还是很复杂的,后面具体展开说 - 辅助功能(内置服务器,……)
除了上面的功能,其实SpringBoot程序还有其他的一些优势,比如我们没有配置Tomcat服务器,但是能正常运行,这是SpringBoot程序的一个可以感知到的功能,也是SpringBoot的辅助功能之一 
2.2 SpringBoot程序的核心
1.parent
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
</parent>
 
- dependencies:统一定义各种依赖的版本,避免版本冲突,在pom中不用自己指定版本
 - aliyun版的pom采用引入依赖的形式实现,没有引入parent标签
 
2.starter
- starter:定义了使用某种技术时对于依赖的固定搭配格式,即包含了若干坐标定义的pom管理文件
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
- 在spring-boot-starter-web中又定义了若干个具体依赖的坐标
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <!--json技术要使用的坐标-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <!--关于tomcat要使用到的坐标-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>2.5.4</version>
        <scope>compile</scope>
    </dependency>
    <!--spring技术要使用的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
    <!--springmvc技术要使用的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
 
3.引导类
引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication
@SpringBootApplication
public class Springboot0101QuickstartApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
        BookController bean = ctx.getBean(BookController.class);
        System.out.println("bean======>" + bean);
    }
}
 
SpringApplication.run(Springboot0101QuickstartApplication.class, args):即spring容器
4.内嵌tomcat
- 位置:在spring-boot-starter-web中引用了tomcat依赖
 - 删除tomcat:排除依赖
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
        
    </dependency>
</dependencies>
 
- 添加新的服务器:jetty
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>
 
-  
SpringBoot提供了3款内置的服务器
1.tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件
2.jetty:更轻量级,负载性能远不及tomcat3.undertow:负载性能勉强跑赢tomcat
 
2.3 基础配置
pre: 复制工程
- 原则:1.保留工程基础结构;2.抹掉原始工程痕迹;3.导入时修改pom文件中的artifactId,删除name、description
 
1. 核心配置文件
- 作用:属性配置
 
# 查看所有配置:在官网的application-properties附件
#  修改服务器端口:
server.port=80
#修改banner
spring.main.banner-mode=off
# 日志
logging.level.root=info
 
- 配置文件格式
 
1)application.properties(properties格式)
# key=value
server.port=80
 
2)application.yml(yml格式)常用
server:
  port: 81
 
3)application.yaml(yaml格式)
server:
  port: 82
 
- 优先级 :properties>yml>yaml
相同配置按照优先级顺序,不同配置会保留 - idea设置配置文件步骤


 
2. yaml文件
-  
YAML(YAML Ain’t Markup Language):
一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。常见的文件扩展名有两种: -  
文件扩展名:
- .yml格式(主流)
 - .yaml格式
 
 -  
严格的语法要求:
1.大小写敏感
2.属性层级关系使用多行描述,每行结尾使用冒号结束
3.使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
4.属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
5.#号 表示注释
6.同级不可有重复的属性名 -  
不同数据类型写法
- 普通数据、数组、对象、对象数组、引用、转义字符
 
 
例:
# 1.常见数据
boolean: TRUE  						#TRUE,true,True,FALSE,false,False均可
float: 3.14    						#6.8523015e+5  #支持科学计数法
int: 123       						#0b1010_0111_0100_1010_1110    #支持二进制、八进制、十六进制
null: ~        						#使用~表示null
string: HelloWorld      			#字符串可以直接书写
string2: "Hello World"  			#可以使用双引号包裹特殊字符
date: 2018-02-17        			#日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00  #时间和日期之间使用T连接,最后使用+代表时区
# 2.数组:属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject:
	- java
	- web
	- c++
	# 数组缩略格式
subject2:[java,web,c++]
# 4.对象数组:格式一
users0:							
  - name: Tom
   	age: 4
  - name: Jerry
    age: 5
# 格式二
users1:							
  -  
    name: Tom
    age: 4
  -   
    name: Jerry
    age: 5
#对象数组缩略格式			    
users2: [{name:Tom,age:4} , {name:Jerry,age:5} ]	
# 5.引用型数据
firstname: Yao
name: ${firstname}Goushi
# 6.转义字符:在字符串外加双引号。\t为空格
name2: "Yao\tGoushi"
 
3. yaml数据读取
- 1.读取单一数据
格式:@Value("${一级属性名.二级属性名…}") 
@Value("${name}")//基本数据:此处name对应于yaml文件中的name
private String name1;
@Value("${user.name}")//对象:此处对应于yaml文件中的user对象的name属性
private String name2;
@Value("${subjects[0]}")//数组:此处name对应于yaml文件中的subjects数组的第一个元素
private String name3;
 
- 2.读取yaml全部属性数据
格式:首先加载environment对象;再根据environment获取 
@Autowired
private Environment env;
public String test(){
	System.out.println(env.getProperty("name"));
}
 
- 3.自定义对象封装数据
步骤:
1)首先定义一个对象User.class
2)添加注解@Component:将该对象纳入Spring管控的范围,也就是定义成一个bean
3)添加注解@ConfigurationProperties(prefix=“user”):将要读取的yml数据配置到类中
prefix=value
4)测试: 
# 数据
users:							
  name: Tom
  age: 4
  subject: 
    - java
    - web
    - c++
 
//对象类
@Component
@ConfigurationProperties(prefix="user")
public class User{
	private String name;
	private Integer age;
	private String[] subject;
}
 
//测试
@RestController
@RequestMapping("/test")
public class TestController{
	@Autowired
	private User user;
	public void main(){
		System.out.println(user);
	}
}
 
三. SpringBoot整合第三方技术
- 通用技术: 
  
- 1.导入对应技术的starter
 - 2.根据提供的配置格式,在配置文件中配置非默认值对应的配置项
 
 
3.1 整合JUnit
-  
1.配置环境:
- pom文件(junit不需要添加) 
    
- 当不使用其他技术时,dependency只导入:spring-boot-starter
 - 当使用其他技术时,dependency导入:spring-boot-starter-web
 - spring-boot-starter-web的第一个依赖就是spring-boot-starter
 - 默认导入dependency:spring-boot-starter-test
 
 - 配置文件(不需要添加)
 
 - pom文件(junit不需要添加) 
    
 -  
2.测试
 
1)编写测试类
@Repository
public class BookImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("正在执行。。。。");
    }
}
 
2)在SpringbootTest01ApplicationTests测试类中添加测试方法
 - a.注入测试类的对象
 - b.调用测试方法
@SpringBootTest
class SpringbootTest01ApplicationTests {
    @Autowired
    private BookDao bookDao;
    @Test
    void contextLoads() {
        bookDao.save();
    }
}
 
@SpringBootTest:
- 名称:测试类注解
 - 位置:位于测试类上方
 - 作用:设置JUnit加载的SpringBoot启动类
 - 参数: 
  
- 当引导类和测试类同一包下面时,不需要加参数
 - 当不在同一包下面时,需要使用参数:@SpringBootTest(classes=SpringbootTest01Application.class)
 - 当在不同包时,不添加参数的方法:添加@ContextConfiguration(classes=SpringbootTest01Application.class)
 
 
3.2 整合MyBatis
- 1.配置环境: 
  
- pom文件 
    
- 在创建项目初:添加dependencies时,选择SQL->MyBatis framework、MySql Driver
 - pom.xml中有:mybatis-spring-boot-starter(非spring技术时,第三方在前面)、mysql-connector-java(5和8有区别)
 
 - 配置文件 
    
- 在application.yml中设置数据源参数
 
 
 - pom文件 
    
 
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.driver
    url: localhost://8080
    username: root
    password: root
 
- 2.测试 
  
- 创建实体,创建Mapper接口、创建mapper配置文件、在测试类中注入mapper接口、执行测试
 
 
3.3 整合MyBatis-Plus
- 1.配置环境: 
  
- pom文件 
    
- 在创建项目初:添加dependencies时,选择SQL->MySql Driver
 - 添加mp技术:因为在开始页面找不到mp,只能在pom中手动添加MyBatis-Plus依赖 
      
- 在maven网站:www.mvnrespository.com中找到依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> 
 - 在maven网站:www.mvnrespository.com中找到依赖
 
 - 配置文件 
    
- 在application.yml中设置数据源参数
 - 设置mp相关配置
 
 
 - pom文件 
    
 
# 数据源参数
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.driver
    url: localhost://8080
    username: root
    password: root
 # mp配置(为实体user添加前缀,可在数据库找到tbl_user表格)
 mybatis-plus:
   global-config:
     db-config:
       table-prefix:tbl_
 
- 2.测试 
  
- 创建实体,创建Mapper接口继承BaseMapper(泛型)、为实体类添加关联数据库表、在测试类中注入mapper接口、执行测试
 
 
3.4 整合Druid
- 1.配置环境: 
  
- pom文件 
    
- 在创建项目初:添加dependencies时,选择SQL->MySql Driver、mybatis
 - 添加druid技术: 在maven网站中找到druid spring boot starter 
      
- 在maven网站:www.mvnrespository.com中找到依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-plus-boot-starter</artifactId> <version>1.2.6</version> </dependency> 
 - 在maven网站:www.mvnrespository.com中找到依赖
 
 - 配置文件 
    
- 在application.yml中设置数据源参数
 
 
 - pom文件 
    
 
# 1.通用方式:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.driver
    url: localhost://8080
    username: root
    password: root
    type:com.alibaba.druid.pool.DruidDataSource
#2.druid专用方式
  spring:
    datasource:
      druid:
        driver-class-name: com.mysql.jdbc.driver
        url: localhost://8080
        username: root
        password: root
   
 
- 2.测试 
  
- 创建实体,创建Mapper接口继承BaseMapper(泛型)、为实体类添加关联数据库表、在测试类中注入mapper接口、执行测试
 
 










