Spring Boot学习笔记

Spring Boot学习笔记

文章目录

1.0 Spring Boot 简介

Spring Boot 是 Spring 家族中的一个全新的框架,它用来简化 Spring 应用程序的创建和开发过程,也可以说 Spring Boot 能简化我们之前采用 SpringMVC + Spring + MyBatis 框架进行开发的过程。
在以往我们采用 SpringMVC + Spring + MyBatis 框架进行开发的时候,搭建和整合三大框架,我们需要做很多工作,比如配置 web.xml,配置 Spring,配置 MyBatis,并将它们整合在一起等,而 Spring Boot 框架对此开发过程进行了革命性的颠覆,完全抛弃了繁琐的 xml 配置过程,采用大量的默认配置简化我们的开发过程。
所以采用 Spring Boot 可以非常容易和快速地创建基于 Spring 框架的应用程序,它让编码变简单了,配置变简单了,部署变简单了,监控变简单了。正因为 Spring Boot 它化繁为简,让开发变得极其简单和快速,所以在业界备受关注。

1.1Spring Boot 的特性

➢ 能够快速创建基于 Spring 的应用程序
➢ 能够直接使用 java main 方法启动内嵌的 Tomcat 服务器运行 Spring Boot 程序,不需
要部署 war 包文件
➢ 提供约定的 starter POM 来简化 Maven 配置,让 Maven 的配置变得简单
➢ 自动化配置,根据项目的 Maven 依赖配置,Spring boot 自动配置 Spring、Spring mvc

➢ 提供了程序的健康检查等功能
➢ 基本可以完全不使用 XML 配置文件,采用注解配置

1.2Spring Boot 四大核心

  • 自动配置

  • 起步依赖

  • Actuator

  • 命令行界面

1.3 Spring Boot 入门案例

1.3.1创建一个 Module ,选择类型为 Spring Initializr 快速构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bShnE7p7-1660833365034)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818151054999.png)]

1.3.2设置 GAV 坐标及 pom 配置信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBTwMlNG-1660833365035)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818151204247.png)]

1.3.3选择 Spring Boot 版本及依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uIYjpiCX-1660833365035)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818151419579.png)]

1.3.4设置模块名称、Content Root 路径及模块文件的目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4ORlHhw-1660833365036)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818151507033.png)]

1.3.5项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSpuKdOe-1660833365036)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818151716621.png)]

1.3.6对 SpringBoot 项目结构进行说明

➢ .mvn|mvnw|mvnw.cmd:使用脚本操作执行 maven 相关命令,国内使用较少,可删除
➢ .gitignore:使用版本控制工具 git 的时候,设置一些忽略提交的内容
➢ static|templates:后面模板技术中存放文件的目录
➢ application.properties:SpringBoot 的配置文件,很多集成的配置都可以在该文件中进行配置,例如:Spring、springMVC、Mybatis、Redis 等。目前是空的
➢ Application.java:SpringBoot程序执行的入口,执行该程序中的main方法,SpringBoot就启动了

1.3.7对 POM.xml 文件进行解释

http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--继承 SpringBoot 框架的一个父项目,所有自己开发的 Spring Boot 都必须的继承-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--当前项目的 GAV 坐标-->
<groupId>com.bjpowernode.springboot</groupId>
<artifactId>002-springboot-springmvc</artifactId>
<version>1.0.0</version>
<!--maven 项目名称,可以删除-->
<name>002-springboot-springmvc</name>
<!--maven 项目描述,可以删除-->
<description>Demo project for Spring Boot</description>
<!--maven 属性配置,可以在其它地方通过${}方式进行引用-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--SpringBoot 框架 web 项目起步依赖,通过该依赖自动关联其它依赖,不需要我们一个一个去添加了
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot 框架的测试起步依赖,例如:junit 测试,如果不需要的话可以删除-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
北京动力节点 www.bjpowernode.com
11
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!--SpringBoot 提供的打包编译等插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

1.4创建一个 Spring MVC 的 的 Spring BootController

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bpnwTWd9-1660833365037)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818152929072.png)]

注意:新创建的类一定要位于 Application 同级目录或者下级目录,否则 SpringBoot 加载不到。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpF5XIDb-1660833365038)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818153358681.png)]

运行main方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DV6dBZWp-1660833365039)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818153417185.png)]

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zZ60tnl-1660833365039)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818153443115.png)]

1.5入门案例分析

➢ Spring Boot 的父级依赖 spring-boot-starter-parent 配置之后,当前的项目就是 SpringBoot 项目
➢ spring-boot-starter-parent 是一个 Springboot 的父级依赖,开发 SpringBoot 程序都需要继承该父级项目,它用来提供相关的 Maven 默认依赖,使用它之后,常用的 jar包依赖可以省去 version 配置
➢ Spring Boot 提供了哪些默认 jar 包的依赖,可查看该父级依赖的 pom 文件
➢ 如果不想使用某个默认的依赖版本,可以通过 pom.xml 文件的属性配置覆盖各个依赖项,比如覆盖 Spring 版本

<properties>
<spring-framework.version>5.0.0.RELEASE</ spring-framework.version >
</properties>

➢ @SpringBootApplication 是 注解是 Spring Boot 项目的核心注解,主要作用是开启Spring 自动配置在 ,如果在 Application 类上去掉该注解,那么不会启动 SpringBoot程序
➢ main 方法是一个标准的 Java 程序的 main 方法,主要作用是作为项目启动运行的入口
➢ @Controller 及 @ResponseBody 依然是我们之前的 Spring MVC,因为 Spring Boot的里面依然是使用我们的 Spring MVC + Spring + MyBatis 等框架

1.6 Spring Boot 的核心配置文件

Spring Boot 的核心配置文件用于配置 Spring Boot 程序,名字必须以 application 开始

1.6.1 .properties 文件(默认采用该文件)

通过修改 application.properties 配置文件,在修改默认 tomcat 端口号及项目上下文件根
键值对的 properties 属性文件配置方式

在这里插入图片描述

1.6.2 .yml 文件

yml 是一种 yaml 格式的配置文件,主要采用一定的空格、换行等格式排版进行配置。
yaml 是一种直观的能够被计算机识别的的数据序列化格式,容易被人类阅读,yaml 类似于 xml,但是语法比 xml 简洁很多,值与前面的冒号配置项必须要有一个空格, yml 后缀也可以使用 yaml 后缀

在这里插入图片描述

注意:当两种格式配置文件同时存在,使用的是.properties 配置文件示 ,为了演示 yml ,可以行先将其改名,重新运行 Application

1.7多环境配置

在实际开发的过程中,我们的项目会经历很多的阶段(开发->测试->上线),每个阶段的配置也会不同,例如:端口、上下文根、数据库等,那么这个时候为了方便在不同的环境之间切换,SpringBoot 提供了多环境配置,具体步骤如下

为每个环境创建一个配置文件,命名必须以 application- 环境标识.properties|yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxGlsysL-1660833365042)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818164252823.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luAwjrBK-1660833365042)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818164335868.png)]

1.8 Spring Boot 自定义配置

1.8.1 @Value 注解

在 SpringBoot 的核心配置文件中,除了使用内置的配置项之外,我们还可以在自定义配置,然后采用如下注解去读取配置的属性值

用于逐个读取 application.properties 中的配置

在核心配置文件 applicatin.properties 中,添加两个自定义配置项 school.name 和
website。在 IDEA 中可以看到这两个属性不能被 SpringBoot 识别,背景是桔色的

在这里插入图片描述

在这里插入图片描述

1.8.2@ConfigurationProperties

将整个文件映射成一个对象,用于自定义配置项比较多的情况

@Component
@ConfigurationProperties(prefix = "school")
public class ConfigInfo {
private String name;
private String websit;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWebsit() {
return websit;
}
public void setWebsit(String websit) {
this.websit = websit;
}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5G52u2w-1660833365046)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818165246708.png)]

1.9 Spring Boot 框架 Web 开发

1.9.1Spring Boot 集成 MyBatis

  1. 在 pom.xml 中添加相关 jar 依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

<!--MySQL 的驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sOfjqy0C-1660833365046)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818170435641.png)]

  1. 在 Springboot 的核心配置文件 application.properties 中配置数据源
#配置内嵌 Tomcat 端口号
server.port=9090
#配置项目上下文根
server.servlet.context-path=/010-springboot-web-mybatis
#配置数据库的连接信息
#注意这里的驱动类有变化
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=t
rue&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyD
atetimeCode=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
  1. 开发代码

使用 Mybatis 反向工程生成接口、映射文件以及实体 bean

在这里插入图片描述在这里插入图片描述

在 service.impl 包下创建 service 接口并编写代码

@Service
public class StudentServiceImpl implements StudentService {
北京动力节点 www.bjpowernode.com
36
@Autowired
private StudentMapper studentMapper;
@Override
public Student queryStudentById(Integer id) {
return studentMapper.selectByPrimaryKey(id);
}
}

在这里插入图片描述在这里插入图片描述

1.9.2 DAO 其它开发方式

在这里插入图片描述

1.9.3将接口和映射文件分开

在这里插入图片描述在这里插入图片描述

2.0 Spring Boot 事务支持

Spring Boot 使用事务非常简单,底层依然采用的是 Spring 本身提供的事务管理
➢ 在入口类中使用注解 @EnableTransactionManagement 开启事务支持
➢ 在访问数据库的 Service 方法上添加注解 @Transactional 即可

在这里插入图片描述在这里插入图片描述

2.1 Spring Boot 下的 Spring MVC

Spring Boot 下的 Spring MVC 和之前的 Spring MVC 使用是完全一样的,主要有以下注解

2.1.1@Controller

Spring MVC 的注解,处理 http 请求

2.1.2@RestController

  • Spring 4 后新增注解,是@Controller 注解功能的增强
  • 是 @Controller 与@ResponseBody 的组合注解
  • 如果一个 Controller 类添加了@RestController,那么该 Controller 类下的所有方法都相当于添加了@ResponseBody 注解用于返回字符串或 json 数据

在这里插入图片描述

2.1.3@RequestMapping

支持 Get 请求,也支持 Post 请求

2.1.4@GetMapping

RequestMapping 和 Get 请求方法的组合
只支持 Get 请求
Get 请求主要用于查询操作

2.1.5@PostMapping

RequestMapping 和 Post 请求方法的组合
只支持 Post 请求
Post 请求主要用户新增数据

2.1.6@PutMapping

RequestMapping 和 Put 请求方法的组合
只支持 Put 请求
Put 通常用于修改数据

2.1.7@DeleteMapping

RequestMapping 和 Delete 请求方法的组合
只支持 Delete 请求
通常用于删除数据

2.1.8概要图

在这里插入图片描述

2.2Spring Boot 实现 RESTful

一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,REST这个词,是 Roy Thomas Fielding 在他 2000 年的博士论文中提出的。

任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构
比如我们要访问一个 http 接口:http://localhost:8080/boot/order?id=1021&status=1
采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1

2.2.1Spring Boot 开发 RESTFul

Spring boot 开发 RESTFul 主要是几个注解实现

2.2.2@PathVariable

获取 url 中的数据
该注解是实现 RESTFul 最主要的一个注解

2.2.3@PostMapping

接收和处理 Post 方式的请求

2.2.4@DeleteMapping

接收 delete 方式的请求,可以使用 GetMapping 代替

2.2.5@PutMapping

接收 put 方式的请求,可以用 PostMapping 代替

2.2.6@GetMapping

接收 get 方式的请求

2.2.7RESTful 原则

➢ 增 post 请求、删 delete 请求、改 put 请求、查 get 请求
➢ 请求路径不要出现动词
例如:查询订单接口
/boot/order/1021/1(推荐)
/boot/queryOrder/1021/1(不推荐)
➢ 分页、排序等操作,不需要使用斜杠传参数
例如:订单列表接口
/boot/orders?page=1&sort=desc
一般传的参数不是数据库表的字段,可以不采用斜杠

2.3 Spring Boot 使用拦截器

2.3.1实现一个登录拦截器

在这里插入图片描述

2.3.2创建一个控制层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbVtmyx6-1660833365056)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818172501838.png)]

2.3.3@Configuration 定义配置类- 拦截器

在 项 目 中 创 建 一 个 config 包 , 创 建 一 个 配 置 类 InterceptorConfig , 并 实 现WebMvcConfigurer 接口, 覆盖接口中的 addInterceptors 方法,并为该配置类添加@Configuration 注解,标注此类为一个配置类,让 Spring Boot 扫描到,这里的操作就相当于 SpringMVC 的注册拦截器 ,@Configuration 就相当于一个 applicationContext-mvc.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0POgLNf-1660833365057)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818172559603.png)]

2.4 Spring Boot 项目配置字编码

在这里插入图片描述

创建 Servlet

在这里插入图片描述

2.5 SpringBoot 集成 Thymeleaf 模板

Thymeleaf 是一个流行的模板引擎,该模板引擎采用 Java 语言开发模板引擎是一个技术名词,是跨领域跨平台的概念,在 Java 语言体系下有模板引擎,在 C#、PHP 语言体系下也有模板引擎,甚至在 JavaScript 中也会用到模板引擎技术,Java 生态下的模板引擎有 Thymeleaf 、Freemaker、Velocity、Beetl(国产) 等。

Thymeleaf 对网络环境不存在严格的要求,既能用于 Web 环境下,也能用于非 Web 环境下。在非 Web 环境下,他能直接显示模板上的静态数据;在 Web 环境下,它能像 Jsp 一样从后台接收数据并替换掉模板上的静态数据。它是基于 HTML 的,以 HTML 标签为载体,Thymeleaf 要寄托在 HTML 标签下实现。

SpringBoot 集成了 Thymeleaf 模板技术,并且 Spring Boot 官方也推荐使用 Thymeleaf 来替代 JSP 技术,Thymeleaf 是另外的一种模板技术,它本身并不属于 Spring Boot,Spring Boot只是很好地集成这种模板技术,作为前端页面的数据展示,在过去的 Java Web 开发中,我们往往会选择使用 Jsp 去完成页面的动态渲染,但是 jsp 需要翻译编译运行,效率低。

在这里插入图片描述在这里插入图片描述

2.5.1标准变量表达式

注意: th:text=“” 是 是 Thymeleaf 的一个属性,用于文本的显示

语法 ${…}

标准变量表达式

用于访问容器(tomcat)上下文环境中的变量,功能和 EL 中的 ${} 相同。Thymeleaf 中的变量表达式使用 ${变量名} 的方式获取 Controller 中 model 其中的数据

案例演示:

在这里插入图片描述在这里插入图片描述

2.5.2URL 表达式

语法@{…}

主要用于链接、地址的展示,可用于
<script src="..."><link href="..."><a href="..."><form action="..."><img src="">等,可以
在 URL 路径中动态获取数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONh4sKlX-1660833365061)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818221526501.png)]

2.6Thymeleaf 的常见属性

2.6.1th:action

定义后台控制器的路径,类似标签的 action 属性,主要结合 URL 表达式,获取动态变量。

在这里插入图片描述
在这里插入图片描述

2.6.2th:method

设置请求方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZBaU0l7-1660833365063)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222044719.png)]

2.6.3th:href

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcAGnKrE-1660833365063)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222101807.png)]

2.6.4th:src

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4f2XyPy-1660833365064)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222144162.png)]

2.6.5th:id

类似 html 标签中的 id 属性

2.6.6th:name

设置名称

2.6.7th:value

类似 html 标签中的 value 属性,能对某元素的 value 属性进行赋值

2.6.8th:attr

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUcnA0EN-1660833365064)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222331051.png)]

2.6.9th:text

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xz3zfmQH-1660833365065)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222352319.png)]

2.6.10th:each

这个属性非常常用,比如从后台传来一个对象集合那么就可以使用此属性遍历输出,它与JSTL 中的<c: forEach>类似,此属性既可以循环遍历集合,也可以循环遍历数组及 Map

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRFflm30-1660833365065)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222541985.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMiFBrbq-1660833365066)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222551484.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xUuxPtF-1660833365067)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222601215.png)]

2.6.11遍历 Map 集合

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.6.12遍历 Array 数组

在这里插入图片描述在这里插入图片描述

2.6.13th:if和th:unless

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLFP3XJG-1660833365071)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818222944448.png)]

2.6.14th:switch/th:case

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMeAQNiG-1660833365071)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220818223007781.png)]

2.7Thymeleaf 运算符

在这里插入图片描述

2.8Thymaleaf 表达式基本对象

模板引擎提供了一组内置的对象,这些内置的对象可以直接在模板中使用,这些对象由#号开始引用,我们比较常用的内置对象

2.8.1#request

#request 相 当 于 httpServletRequest 对 象 , 这 是 3.x 版 本 , 若 是 2.x 版 本 使 用#httpServletRequest,在页面获取应用的上下文根,一般在 js 中请求路径中加上可以避免 404。

在这里插入图片描述

2.8.2#session

相当于 HttpSession 对象,这是 3.x 版本,若是 2.x 版本使用#httpSession在后台方法中向 session 中放数据

switch/th:case

[外链图片转存中...(img-XMeAQNiG-1660833365071)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值