一、springboot的快速入门
- springboot的作用:用来简化Spring应用的初始搭建以及开发过程
一、idea创建springboot工程——运行的步骤
-
选择Spring Initializr进行创建(现在基本上没有jdk1.8选了,都是jdk17了,需要的话,可以先选jdk17初始化然后再手动修改回jdk1.8)
-
选择该springboot工程需要的依赖(也可以后面再在maven的pom.xml文件中添加依赖)
-
点击create创建工程后,然后可以先写一个控制器类(controller)
//Rest模式
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String getById(){
System.out.println("springboot is running...");
return "springboot is running...";
}
}
- 运行自动生成的Application类
- 然后访问(默认的端口是8080):http://localhost:8080/hello
- 可以访问成功就说明创建的springboot工程没有问题
一、1、 springboot工程的创建方式
- 上面的创建步骤是(idea基于SpringBoot官网创建项目,地址:https://start.spring.io/)
- 可以修改网址,基于不同的官网进行创建项目,比如阿里云的:(基于阿里云创建项目,地址:https://start.aliyun.com)
- 也可以直接在spring官网下创建springboot项目:(这方法会下载一个压缩包给你)
- 也可以直接创建一个maven工程然后再把它改造成一个springboot工程
-
- 手工创建一个maven项目(然后手工导入springboot需要的坐标)
- 手工创建一个maven项目(然后手工导入springboot需要的坐标)
-
- 手工创建项目(手工制作引导类)
- 手工创建项目(手工制作引导类)
-
一、2、 idea隐藏指定文件
- Idea中隐藏指定文件或指定类型文件(就是我们一般打开一个项目会有很多的
- Setting → File Types → Ignored Files and Folders
- 输入要隐藏的文件名,支持*号通配符
- 回车确认添加
一、3、 springboot相对于spring的优点
- SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
- Spring程序缺点
- 依赖设置繁琐
- 配置繁琐
- SpringBoot程序优点
- 起步依赖(简化依赖配置)
- 自动配置(简化常用工程相关配置)
- 辅助功能(内置服务器,……)
- 四个方面:
-
- parent
-
- starter
-
- 引导类
-
- 辅助功能(内嵌tomcat:只是辅助功能的其中之一)
-
一、3.1、 springboot相对于spring的优点-parent(parent只是定义,并未使用)
-
结论:
-
- 开发SpringBoot程序要继承spring-boot-starter-parent
-
- spring-boot-starter-parent中定义了若干个依赖管理
-
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
-
- 继承parent的形式也可以采用引入依赖的形式实现效果
-
-
使用:我们直接使用对应的依赖就行,无需写版本(底层会为你自动调用版本了)。依赖的版本会根据你使用的springboot版本的不同而不同。
- 在spring-boot-dependencies里面:
-
- 定义一系列的常用坐标版本
-
- 定义一系列的常用坐标组合
-
- 直接使用组合(底层实现的)
-
- 在spring-boot-dependencies里面:
只需写成下图这样即可:
一、3.1.1、 springboot相对于spring的优点-parent与starter
-
starter
-
- 是一个坐标中定了若干个坐标,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
-
-
parent
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理dependencyManagement,而非依赖),以达到减少依赖冲突的目的
- spring-boot-starter-parent各版本间存在着诸多坐标版本不同
-
实际开发
- 如果有对应的starter,使用任意坐标时,仅书写GAV(G:groupId,A:atifactId,V:version)中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
- 如发生坐标错误,再指定Version(要小心版本冲突)
- 如果没有对应的starter,则直接手写坐标
-
parent与starter都是解决配置问题的
一、3.2、 springboot相对于spring的优点-starter
- 总结
-
- 开发SpringBoot程序需要导入坐标时通常导入对应的starter
-
- 每个不同的starter根据功能不同,通常包含多个依赖坐标
-
- 使用starter可以实现快速配置的效果,达到简化配置的目的
-
- 一个starter里面包含了若干个坐标定义的pom管理文件
一、3.3、 springboot相对于spring的优点-引导类
- SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。
- 换了SpringBoot加速开发Spring程序后,这个引导类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。
- 引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication
- 引导类:
- SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目(但未启动web服务器)
- Spring Boot的引导类(通常带有
@SpringBootApplication
注解的类)的main
方法确实会启动Spring Boot应用,但默认情况下,它不会启动嵌入式Web服务器。 - 在Spring Boot中,
@SpringBootApplication
注解是一个组合注解,它包含了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
三个注解。当Spring Boot应用启动时,它会根据这些注解来初始化Spring应用上下文(ApplicationContext)。 - 然而,要启动嵌入式Web服务器(如Tomcat),还需要一些额外的配置。默认情况下,Spring Boot会尝试自动配置一个嵌入式Web服务器,但只有在检测到某些条件满足时(例如,存在
@RestController
或@Controller
注解的类)才会启动。 - 如果你希望在没有Web控制器的情况下启动Spring Boot应用,你可以通过以下方式配置嵌入式Web服务器:
- Spring Boot的引导类(通常带有
-
显式配置嵌入式Web服务器:在
application.properties
或application.yml
文件中添加以下配置:server.port=8080
这将启动嵌入式Web服务器并监听8080端口。
-
使用
@EnableAutoConfiguration
排除Web服务器:如果你不希望启动嵌入式Web服务器,可以在@SpringBootApplication
注解中排除WebServerFactoryAutoConfiguration
类:import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.WebServerFactoryAutoConfiguration; @SpringBootApplication(exclude = {WebServerFactoryAutoConfiguration.class, WebMvcAutoConfiguration.class}) public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
Spring Boot将不会尝试启动嵌入式Web服务器。
-
Spring Boot的引导类会启动Spring应用上下文,但默认情况下不会启动嵌入式Web服务器。要启动Web服务器,需要额外的配置。
-
SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean
-
结论:
-
- SpringBoot工程提供引导类用来启动程序
-
- SpringBoot工程启动后创建并初始化Spring容器
-
一、3.4、 springboot相对于spring的优点-辅助功能(内嵌tomcat)
- tomcat是拿java代码写的,它里面有好多的jar包。java语言是靠什么运行的(靠对象运行的),那么就可以把对象交给spring管理了。它将一个tomcat容器的执行过程抽取出来,变成一个对象,然后把这个对象交给spring管理。(即spring容器中有一个tomcat对象,你现在要运行的东西,需要在tomcat对象里面去运行)。这就是为什么我们的程序中没有装tomcat服务器还能启动起来tomcat的原因。
-
springboot三款内置服务器:
- tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件
- jetty:更轻量级,负载性能远不及tomcat
- undertow:undertow,负载性能勉强跑赢tomcat
-
总结:
-
- 内嵌Tomcat服务器是SpringBoot辅助功能之一
-
- 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
-
- 变更内嵌服务器思想是去除现有服务器,添加全新的服务器
-
一、4、springboot的基础配置(配置文件)
- SpringBoot默认配置文件application.properties,通过键值对配置对应属性
- SpringBoot中导入对应starter(依赖坐标)后,提供对应配置属性
- 书写SpringBoot配置采用关键字+提示形式书写
- SpringBoot提供了多种属性配置方式
- properties(传统格式/默认格式)
- yml(主流格式)
- yaml
- SpringBoot配置文件加载顺序:
application.properties > application.yml > application.yaml
- 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
一、4.1、springboot的基础配置(配置文件)—yaml
-
YAML(YAML Ain’t Markup Language),一种数据序列化格式。
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
- .yml(主流)
- .yaml
- 优点:
-
yaml语法规则:
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
- 数据前面要加空格与冒号隔开
-
字面值表示方式:
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连接,最后使用+代表时区
- 数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
-
likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式
- name: Tom
age: 4
- name: Jerry
age: 5
users: #对象数组格式二
-
name: Tom
age: 4
-
name: Jerry
age: 5
#对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
一、4.1.1、springboot的基础配置(配置文件)—yaml多环境配置多文件版
- 对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
- 来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同。
- 文件的命名规则为:application-环境名.yml。
- 主配置文件中设置公共配置(全局)
- 环境分类配置文件中常用于设置冲突属性(局部)
- application.yml(主配置文件)
# 主配置文件,决定使用下面三种环境的哪一个
#设置启用的环境
spring:
profiles:
active: dev #表示使用的是开发环境的配置
- application-dev.yml(开发环境)
#开发
server:
port: 80
- application-prod.yml(生产环境)
#生产
server:
port: 81
- application-test.yml(测试环境)
#测试
server:
port: 82
一、4.1.2、配置文件分类
-
SpringBoot提供的4级配置文件分别是:
- 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件):服务于开发人员本机开发与测试
- 类路径下config目录下配置文件:服务于项目经理整体调控
- 程序包(打包好的工程)所在目录中配置文件:服务于运维人员配置涉密线上环境
- 程序包(打包好的工程)所在目录中config目录下配置文件:服务于运维经理整体调控
-
4种配置文件如果都存在的话,有一个优先级的问题,4个文件的加载优先顺序为:
-
- file :config/application.yml 【最高】
-
- file :application.yml
-
- classpath:config/application.yml
-
- classpath:application.yml 【最低】
-
-
多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
一、4.2、springboot的基础配置(配置文件)—yaml数据读取
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
- 在配置文件中可以使用属性名引用方式引用属性
- 属性值中如果出现转移字符,需要使用双引号包裹,特殊字符才能生效。
lesson: "Spring\tboot\tlesson"
# \t表示制表符
# 注入lesson的值后,lesson = Spring boot lesson
-
读取yml的全部属性:封装全部数据到Environment对象
- 数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法是getProperty(String),参数填写属性名即可
- 数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法是getProperty(String),参数填写属性名即可
-
读取yml的部分属性:(最实用)
-
- 在yml配置文件中提供数据
-
- 然后提供一个封装数据的模型类(用来封装我们定义的数据,注意:封装类的属性名应该和yml文件配置的属性名一致)
-
- 这个封装类必须受spring控制(封装类需要定义为Spring管理的bean,否则无法进行属性注入)
-
- 通过springboot的@ConfigurationProperties注解绑定配置信息到封装类中
- 通过springboot的@ConfigurationProperties注解绑定配置信息到封装类中
-
二、springboot整合junit
- 导入测试对应的starter(使用idea创建springboot工程默认会导入的)
- 测试类使用@SpringBootTest修饰(使用idea创建springboot工程默认会创建的)
- 使用自动装配的形式添加要测试的对象(使用@Autowire注解)
二、1、springboot整合junit——classes
- 测试类如果存在于引导类所在包或子包中无需指定引导类
- 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类
三、springboot整合mybatis
- 整合MyBatis
- 核心配置:数据库连接相关信息(连什么?连谁?什么权限)
- 映射配置:SQL映射(XML/注解)
大概要干嘛:
1. 勾选MyBatis技术,也就是导入MyBatis对应的starter
2. 数据库连接相关信息转换成配置文件的配置信息
3. 数据库SQL映射需要添加@Mapper被容器识别到
- 步骤:
- ①:创建新模块,选择Spring初始化,并配置模块相关基础信息
- ②: 选择当前模块需要使用的技术集(MyBatis、MySQL)
- ③:设置数据源参数
- ④:定义数据层接口与映射配置
- ⑤:测试类中注入dao接口,测试功能
①:创建新模块,选择Spring初始化,并配置模块相关基础信息
②: 选择当前模块需要使用的技术集(MyBatis、MySQL)
③:设置数据源参数
④:定义数据层接口与映射配置
⑤:测试类中注入dao接口,测试功能
三、1、@Mapper注解
-
@Mapper: 这个注解一般使用在
Dao层接口
上,相当于一个mapper.xml文件
,它的作用就是将接口生成一个动态代理类
。加入了@Mapper注解,目的就是为了不再写mapper映射文件
。这个注解就是用来映射mapper.xml文件的。 -
使用@mapper后,不需要
在spring配置中设置扫描地址
,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入ServiceImpl中.
注意:
在Dao层不要存在相同名字的接口,也就是在Dao不要写重载。
因为mapper文件是通过id与接口进行对应的,如果写了两个同名的接口,就会导致mapper文件映射出错。
- @Mapper注解是MyBatis框架中的注解之一,它的作用是将一个Java接口标记为一个Mapper接口,使得MyBatis可以自动地为这个接口生成代理对象。在MyBatis 3.4.0版本之前,我们需要手动编写Mapper接口的实现类,而在3.4.0版本之后,只需要在Mapper接口上添加@Mapper注解,MyBatis就会自动为我们生成实现类。
需要注意的是,@Mapper注解只能用于接口上,不能用于类上。
三、2、@mysql8.x版本注意
- MySQL 8.X驱动强制要求设置时区
- 修改url,添加serverTimezone设定
- 修改MySQL数据库配置(略)
- 数据库驱动过时的警告,根据提示修改配置即可,弃用com.mysql.jdbc.Driver,换用com.mysql.cj.jdbc.Driver。
四、springboot整合mybatis-Plus
-
步骤:(需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标)
-
- 手工添加MyBatis-Plus对应的starter
-
- 数据层接口使用BaseMapper简化开发
-
- 写测试类
-
-
具体操作:
①手工添加MyBatis-Plus对应的starter
② yml的配置
③数据层接口使用BaseMapper简化开发
④测试类:
五、springboot整合druid
- 整合第三方技术通用方式
- 1. 导入对应的starter(即对应的依赖)
- 2. 根据提供的配置格式,配置非默认值对应的配置项(yml配置文件)
- 整合druid步骤:
-
- 整合Druid需要导入Druid对应的starter
-
- 根据Druid提供的配置方式进行配置
-
- 编写测试类
-
①整合Druid需要导入Druid对应的starter
②根据Druid提供的配置方式进行配置
③测试
总结
- 上面整合的几个模块,其实都是类似的步骤:
-
- 添加依赖
-
- 编写配置文件
-
- 编写业务代码
-
- 可以发现使用springboot整合技术相比spring真的简化了很多了