SpringBoot基础篇:
入门须知:
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
SpringBoot相对于之前的工程的优点:
类配置文件 | Spring | SpringBoot |
---|---|---|
pom文件中的坐标 | 手工添加 | 勾选添加 |
web.xml配置类 | 手工制作 | 无 |
Spring/SpringMVC配置类 | 手工制作 | 无 |
控制器 | 手工制作 | 手工制作 |
SpringBoot项目的创建: 创建的项目是选择Spring Initializr
属性名 | 含义 |
---|---|
Name | 项目的名称 |
Location | 项目的位置 |
Group | 项目的工程坐标 |
Artifact | 项目资产的一个集合(工件) |
Package Name | 项目的包目录 |
其他的 | 默认即可 |
创建好之后 , 在项目的目录下有一个名字最后为Application的类 , 这个类就是SpringBoot项目的主启动类 :
SpringBoot工程的创建
(1)使用IDEA创建
步骤如上:
(2)使用Spring官网创建
在IDEA不连接网络的情况下创建一个SpringBoot工程
使用IDEA创建SpringBoot工程时必须要连接网络
访问网站https://start.spring.io/
左边选择完后,在右边的里边选择使用的对应的功能 , 然后点击GENERATE , 这个时候会下载一个压缩文件 , 里边就是对应的工程文件, 将这个文件放入到项目下边 , 在Modules中将这个工程导入进去即可
(3)使用阿里云创建
使用阿里云的网址http://start.aliyun.com
阿里云提供了一些中文的模块,可供选择
阿里云的SpringBoot可能版本不太新,可以直接在pom文件中修改版本号,来进行版本的更新
(4)在不联网的情况下创建
不联网的话是可以创建SpringBoot工程的,但是使用Maven的话不能够下载对应的资源
在创建的时候选择maven项目 , 不使用骨架
①在pom文件中添加对应的依赖和插件
<!--继承: 可以把你对应父工程的东西引用过来-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--Boot工程打包的时候可以用到-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
②创建一个引导类:
@SpringBootApplication//必须要使用这个注解
public class Application {
//主启动类
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
SpringBoot主体的介绍:
(1)依赖坐标的统一管理 : parent
开发SpringBoot工程要继承 spring-boot-starter-parent ,
注意继承只能使用一次 , 继承之后就不能再继承其他的了
也可以使用引入依赖的方式实现效果(阿里云使用的就是直接导入依赖的方式)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
对于依赖坐标的版本问题 , 是限制于SpringBoot的版本的 , 不同的版本 , 内置的依赖版本信息是不同的
管理方式 : 将常用的一些坐标和版本号分开创建成两个pom文件 , pom1中是将坐标的版本号全部设为Maven的属性 , 在pom2中设置的是坐标的属性 , 而使用那个版本则是直接引用pom1中的属性 ,
也就是说 : 并不用考虑pom坐标的版本统一的事情了, SpringBoot会自 动给你使用最兼容的版本 , 提供给你使用
在这个文件中定义了很多的Maven版本号 , 在这些版本号下边 , 编写了一些常用的依赖的坐标 , 然后就直接引用了上边的版本号
(2)定义SpringBoot使用的基本依赖坐标:starter
在SpringBoot项目的pom文件中 , 要引入两个依赖 :
这两个依赖就是使用导入的方式 : 在内部封装了SpringBoot项目所使用的基础依赖 , 以达到减少依赖配置的目的
- 实际开发中 : 仅书写GAV中的A和V由SpringBoot提供 , 除非SpringBoot未提供对应版本 V
- 如发生坐标错误 , 在指定Version(要小心版本冲突)
(3)引导类:
SpringBoot0102QuickstartApplication ;
这个类就是初始的引导类 , 在创建SpringBoot项目的时候 , 会自动创建这个类 , 这个类的名字可以自定义 ,只要run中的类名对应即可
@SpringBootApplication
public class SpringBoot0102QuickstartApplication {
public static void main(String[] args) { SpringApplication.run(SpringBoot0102QuickstartApplication.class, args);
}
}
实现引导类的功能主要就是靠 @SpringBootApplication这个注解来完成的 , 注解上边有几个注解 ,
其中使用的是
@ComponentScan : 使用这个注解来加载引导类的父包内的所有子包和文件
@SpringBootConfiguration : 这个注解中有一个注解 , @Configuration
说明这个引导类是一个主配置类
- SpringBoot的引导类是Boot工程的执行入口 , 运行main方法就可以启动项目
- SpringBoot工程运行后初始化Spring容器 , 扫描引导类所在的包加载bean
(4)内嵌Tomcat
在SpringBoot中的
spring-boot-starter-web
中有一个
spring-boot-starter-tomcat
在这个里边有一个内嵌的tomcat-embed-core , 就是内嵌的一个tomcat ,
这里是将整个tomcat/*封装*/为一个/*对象*/ ,
/*将这个对象交给spring容器*/来进行管理
不想使用这个内嵌的tomcat , 可以将这个tomcat在pom文件中排除掉这个tomcat
<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>
然后可以引入对应的服务器依赖 , SpringBoot默认支持三款服务器 ,
Tomcat :(默认) Apache出品 , 粉丝多,应用面广 , 负载了若干较重的组件
Jetty : 更轻量级 , 负载性能远不及tomcat
Undertow : (了解) , 负载性能勉强跑赢tomcat
引入时只需要将spring-boot-starter-tomcat中的tomcat替换即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
SpringBoot的基础配置:
- 打开resources包中的application.properties , 这个就是SpringBoot使用的配置文件
- 打开的时候是空的 , 里边什么都没有 ;
基础配置:
(1)修改内置Tomcat使用的端口号 :
server.port = 想要设置的端口号
(2)修改banner
#关闭banner
spring.main.banner-mode=off
#设置banner
spring.banner.image.location=对应的图片位置
spring.main.banner-mode的属性值 | 效果 |
---|---|
off | 关闭banner |
console | 显示在控制台 |
log | 显示在日志中 |
(3)设置日志
logging.level.root=要设置的日志打印级别
logging.level.root的属性 | 效果 |
---|---|
info | 默认的属性 |
error | 打印错误级别的日志 |
debug | 打印的东西比较多,用在调试的时候使用 |
查看官网的配置信息 :
上边是文档下边是附录 , 选择附录的第一个 , 里边就是SpringBoot的所有配置信息
注意 :
SpringBoot的配置依赖于你使用的技术是什么 , 只有导入对应的jar包 , 才可以使用对应技术的配置
SpringBoot提供了三种配置文件的格式 :
(1)properties的格式 :
server.port=80
上边已经写了
(2)yml的格式 : (主流格式推荐使用)
server:
port: 81
(3)yaml格式 :
server:
port: 82
SpringBoot的配置文件加载优先级
properties > yml > yaml
- 如果配置多个配置文件 , 会有加载优先级覆盖问题 ,
- 如果是重复的属性 , 优先级高的属性保存下来
- 如果没有重复的属性 , 那么就会保存下来
指定SpringBoot的配置文件 :
Setting --> Project Structure --> Facets
选中对应项目/工程
Customize Spring Boot
选择配置文件
SpringBoot整合第三方技术 :
(1)整合Junit :
1.导入测试对应的Starter (SpringBoot自动帮你完成了)
2.测试类使用@SpringBootTest修饰
3.使用自动装配的形式添加要测试的对象(也就是@Autowired)
注意:
- 使用这个方法的时候 , 测试类所在的包路径要和引导类所在的包的路径一致
- springboot会从测试类找对应的包名 , 然后找到引导类
解决这个问题 , 在@SpringBootTest注解中加一个属性
@SpringBootTest(classes = Springboot04JunitApplication.class)
//指定项目的配置类是哪个 ,
//还可以使用@ContextConfiguration(classes = Springboot04JunitApplication.class) , 这个注解也可以实现这个功能
class Springboot04JunitApplicationTests {
//1.注入你要测试的对象
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
//2.执行你要测试的对象对应的方法
bookDao.save();
}
}
(2)整合MyBatis
配置 :
-
核心配置 : 数据库的连接相关的信息 (连什么?连谁?什么权限)
-
在主配置文件中 ;
-
添加 :
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sichen?serverTimezone=UTC username: root password: acpl159357
-
-
映射配置 : SQL映射(XML / 注解)
- 让SpringBoot知道这个是一个mapper , 使用注解或者xml都可以
(3)整合MyBatis-Plus
因为这个技术是国人创建的 , 所以直接使用SpringBoot的官方创建方式是没有这个技术的选项的 ,
- 可以使用阿里云的方式 , 创建SpringBoot工程的时候 , 会带有这个技术的选项的
- 也可以直接在pom文件中添加对应的依赖坐标
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
使用MyBatis-Plus技术的好处是 :
不用自己再写对应的mapper文件了 ,
- 直接写一个接口类 , 继承BaseMapper ;
- 然后将(对应数据库表的)模块的泛型传进去 : Plus会自动对这个类型的名称做映射 , 也就是获取对应的表名
- 然后就可以直接在service层中注入dao , 并且直接使用MyBatis-Plus内部定义好的方法
但是如果对应的表名带有前缀的话 , MyBatis-Plus会映射不到这个表 , 这个时候
- (1)就需要在主配置中配置
mybatis-plus:
global-config:
db-config:
table-prefix: 表的前缀名
- (2)或者直接在实体类上使用注解 : 这样就可以是plus映射到指定的表名
@TableName(value="表名")
(4)整合Druid
-
导入Druid对应的starter坐标
-
配置主配置文件
-
#spring: # datasource: # driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://localhost:3306/sichen?serverTimezone=UTC # username: root # password: acpl159357 # type: com.alibaba.druid.pool.DruidDataSource #整合型的配法 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sichen?serverTimezone=UTC username: root password: acpl159357
(4)整合Druid
-
导入Druid对应的starter坐标
-
配置主配置文件
-
#spring: # datasource: # driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://localhost:3306/sichen?serverTimezone=UTC # username: root # password: acpl159357 # type: com.alibaba.druid.pool.DruidDataSource #整合型的配法 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sichen?serverTimezone=UTC username: root password: acpl159357