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.引导类
引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication
作用:加载整个项目。相当一applicationContext。所有spring框架的bean和springboot测试类都要在其包或其子包中
@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);
}
}
2.parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
- dependencies:统一定义各种依赖的版本,避免版本冲突,在pom中不用自己指定版本
- aliyun版的pom采用引入依赖的形式实现,没有引入parent标签
3.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>
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-spring-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接口、执行测试