文章目录
- 
   - 一、为什么要学习SpringBoot
- 二、SpringBoot介绍
- 
     - 2.1 约定优于配置
- 2.2 SpringBoot中的约定
 
- 三、SpringBoot快速入门
- 
     - 3.1 快速构建SpringBoot
- 
       - 3.1.1 选择构建项目的类型
- 3.1.2 项目的描述
- 3.1.3 指定SpringBoot版本和需要的依赖
- 3.1.4 导入依赖
- 3.1.5 编写了Controller
- 3.1.6 测试
 
- 3.2 SpringBoot的目录结构
- 
       - 3.2.1 pom.xml文件
- 3.2.2 .gitignore文件
- 3.2.3 src目录
 
- 3.3 SpringBoot三种启动方式
- 
       - 3.3.1 运行启动类的main方法
- 3.3.2 maven命令
- 3.3.3 采用jar包的方式运行
- 3.3.4 采用war包的方式运行
 
 
- 四、SpringBoot常用注解
- 
     - 4.1 @Configuration和@Bean
 
- 五、SpringBoot常用配置
- 
     - 5.1 SpringBoot的配置文件格式
- 5.2 多环境配置
- 5.3 引入外部配置文件信息
- 5.4 热加载
- 
       - 5.4.1 导入依赖
- 5.4.2 settings配置
- 5.4.3 重新构建工程
 
 
- 六、SpringBoot整合Mybatis
- 
     - 6.1 xml方式整合Mybatis
- 
       - 6.1.1 导入依赖。
- 6.1.2 编写配置文件
- 6.1.3 准备Mybatis
- 6.1.4 测试。
 
- 6.2 注解方式整合Mybatis
- 
       - 6.2.1 创建District的Mapper接口
- 6.2.2 添加Mybatis注解
- 6.2.3 添加配置
- 6.2.4 测试,查看日志
 
- 6.3 SpringBoot整合MyBatis-Plus
- 
       - 6.3.1 导入依赖
- 6.3.2 yml配置
- 6.3.3开启dao层扫描
- 6.3.4 注解
- 6.3.5 开启分页
- 6.3.6 测试
- 6.3.7事务控制
 
 
- 七、SpringBoot提供视图支持
- 
     - 7.1 JSP视图
- 
       - 7.1.1 需要导入依赖
- 7.1.2 创建JSP页面
- 7.1.3 创建Contorller
- 7.1.4 配置前缀和后缀
 
- 7.2 Thymeleaf视图
- 
       - 7.2.1 依赖
- 7.2.2 yml配置
- 7.2.3 使用thymeleaf
- 7.2.4 修改html模板
- 7.2.5 thymeleaf其他属性
- 7.2.6 分页 (page.html)
- 7.2.7 包含
 
 
- 八、SpringBoot静态资源处理
- 九、SpringBoot自定义静态资源处理
- 十、页面跳转
- 十一、拦截器
- 十二、SpringBoot全局异常处理
- 
     - 出现异常响应页面
- 出现异常响应JSON数据
 
- 十三、SpringBoot读取属性文件
- 
     - 配置文件
- 使用@Value注解读取
- 使用Environment读取
- 读取自定义属性文件
- 
       - 定义配置文件
- 主启动类加载配置文件
 
 
- 十四、RestTemplate
- 
     - 异步提交
- 表单提交
- 地址栏传值
 
- 十五、参数解析
- 
     - 使用场景
- 参数解析接口
- 使用
- 
       - 定义参数解析器
- 在WebMVC中配置参数解析器
- 在接口中使用
 
 
- 十六 、控制层统一返回格式
- 
     - 统一返回结构
- 统一包装
 
- 十七、通过代码的方式获取指定API
- SpringBoot配置FastJSON转换器
- Spring Boot优雅地处理404异常
 
一、为什么要学习SpringBoot
开发项目的时候(JavaEE)仅仅使用Spring逐渐变得很笨重,大量的XML文件存在与项目中,繁琐的配置,整合第三方框架的配置问题,在SpringBoot中这些问题都变的非常简单。
二、SpringBoot介绍
Spring Boot是由Pivotal团队提供的全新[框架](https://so.csdn.net/so/search?q=框架&spm=1001.2101.3001.7020),其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Spring Boot默认配置了很多框架的使用方式,就像 Maven整合了所有的Jar包,Spring Boot整合了所有的框架。它的核心设计思想是∶约定优于配置,Spring Boot所有开发细节都是依据此思想进行实现的
2.1 约定优于配置
 这是形容springBoot最常用的描述,也有人解读为:约定大于配置,约定好于配置,习惯大于配置等。
用springBoot框架开发程序时,框架提供的默认值会让我们的项目开发起来效率更快,如果默认值满足不了我们的需求,我们可以使用Properties配置文件和YAML配置文件来重写默认值来满足我们的需求,所以约定大于配置,是说通过约定来较少配置,从而提升开发效率。
 而且约定大于配置,并不是一种新的思想,在JDK5.0发布,采用元数据 ,引入注解的概念(也称之为标注),就代表简化配置的开始,就是初期的一种 “约定优于配置” 的体现;所以约定优于配置这一设计理念,从 Spring 的注解版本就已经开始了。引入注解就是为了减少一些默认配置,引入注解也就代表着简化配置的开始,官方说基于 spring 的基础就是这个事实。
2.2 SpringBoot中的约定
1、Maven的目录结构。默认有resources文件夹,存放资源配置文件。src-main-resources,src-main-java。默认的编译生成的类都在targe文件夹下面
2、spring boot默认的配置文件必须是,也只能是application.命名的yml文件或者properties文件,且唯一
3、application.yml中默认属性。数据库连接信息必须是以spring: datasource: 为前缀;多环境配置。该属性可以根据运行环境自动读取不同的配置文件;端口号、请求路径等
4、SpringBoot 约定,当你导入 spring-boot-starter-web 后,就约定了你是一个 web 开发环境。就约定了你会使用 SpringMVC。至于其它的也约定你会需要,都给你默认导入进来。当你觉得不合适的时候,可以用更少的改动,满足你的需要。
5、当我们导入spring-boot-starter-web后,就会自动帮我们导入springMVC的相关依赖和一个内置的tomcat容器,以及spring-boot-starter-logging依赖。这使得在开发阶段可以直接通过 main 方法或是 JAR 包独立运行一个 WEB 项目。
6、SpringBoot 约定以 starter 的形式减少依赖,于是相继推出了不少常用的 starter。
三、SpringBoot快速入门
3.1 快速构建SpringBoot
3.1.1 选择构建项目的类型
| 选择构建项目的类型 | 
|---|
|  | 
3.1.2 项目的描述
| 项目的描述 | 
|---|
|  | 
3.1.3 指定SpringBoot版本和需要的依赖
| 指定SpringBoot版本和需要的依赖 | 
|---|
|  | 
3.1.4 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 将上述内容修改为下面的效果 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.1.5 编写了Controller
@RestController
public class TestController {
   
    @GetMapping("/test")
    public String test(){
   
        return "Hello SpringBoot!";
    }
}
3.1.6 测试
| 效果 | 
|---|
|  | 
3.2 SpringBoot的目录结构
3.2.1 pom.xml文件
 ●指定了一个父工程: 指定当前工程为SpringBoot,帮助我们声明了starter依赖的版本。
 ●项目的元数据:包名,项目名,版本号。
 ●指定了properties信息:指定了java的版本为1.8
 ●导入依赖:默认情况导入spring-boot-starter,spring-boot-starter-test
 ●插件:spring-boot-maven-plugin
3.2.2 .gitignore文件
默认帮我们忽略了一些文件和目录,避免提交到Git仓库中
3.2.3 src目录
-src
  -main	  
    -java
      -包名
        启动类.java			# 需要将controller类,放在启动类的子包中或者同级包下
    -resources
      -static				  # 存放静态资源的
      -templates			   # 存储模板页面的
      application.properties	 # SpringBoot提供的唯一的配置文件
  -test   				      # 只是为了测试用的
3.3 SpringBoot三种启动方式
3.3.1 运行启动类的main方法
运行main方法即可
3.3.2 maven命令
mvn spring-boot:run
3.3.3 采用jar包的方式运行
将当前项目打包成一个jar文件,并通过java -jar jar文件
3.3.4 采用war包的方式运行
<artifactId>day64-sboot-01-mybatis-tx</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
 	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 移除嵌入式tomcat插件 -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- 添加servlet支持-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<!--添加Tomcat-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
修改主启动类配置
public class ServletInitializer extends SpringBootServletInitializer {
   
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
   
		return application.sources(Day64Sboot01MybatisTxApplication.class);
	}
}
原理是该项目被打成war包后放入到webapps下面,tomat启动的时候就会调用这个方法,从而初始化项目。这个类要和SpringBoot的主启动类放在一起。

打包
mvn package
四、SpringBoot常用注解
4.1 @Configuration和@Bean
●之前使用SSM去开发时,在xml文件中编写bean标签,但是SpringBoot不推荐使用xml文件。
●@Configuration注解相当于beans标签
●@Bean注解相当于bean标签
●id=“方法名 | 注解中的name属性(优先级更高)”
●class=“方法的返回结果”
@Configuration   // 代表当前类是一个配置类
public class UserConfig {
   
    
    @Bean(name = "user1")       // 构建一个实例,放到spring容器中
    public User user(){
   
        User user = new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }
    
    /*
    <beans ....>            @Configuration
        <bean id="user1" class="com.qf.firstspringboot.entity.User" />
    </beans>
     */
}
五、SpringBoot常用配置
5.1 SpringBoot的配置文件格式
SpringBoot的配置文件支持properties和yml,甚至他还支持json。
更推荐使用yml文件格式:
-  yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置 
-  yml文件,相比properties更轻量级一些 
yml文件的劣势:
-  严格遵循换行和缩进 
-  在填写value时,一定要在: 后面跟上空格 
applicaiton.properties
user.username=root
#时间
user.birthday=2016-12-12
#数组
user.loves[0]=book
user.loves[1]=code
user.loves[2]=java
#list
user.emails[0]=a@qf.com
user.emails[1]=b@qf.com
user.emails[2]=c@qf.commo
#map
user.userMap[k1]=v1
user.userMap[k2]=v2
application.yml
server:
  port: 8888
  servlet:
    context-path: /abc
user:
 username: 张三
 loves:
    - java
    - book
 id: 10
 emails:
    - a1@qf.com
    - a2@qf.com
 userMap:
    k1: v1
    k2: v2
 birthda: 2019-12-12
5.2 多环境配置
在application.yml文件中添加一个配置项:
spring:
  profiles:
    active: 环境名
在resource目录下,创建多个application-环境名.yml文件即可
在部署工程时,通过 java -jar jar文件 --spring.profiles.active=环境
5.3 引入外部配置文件信息
和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容。
如果在yml文件中需要编写大量的自定义配置,并且具有统一的前缀时,采用如下方式
// Java程序
@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
   
   private String xxxx;
   private ... ...;
}
配置文件
aliyun:
  xxxx: xxxxxxxxx
5.4 热加载
5.4.1 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
5.4.2 settings配置
| 修改settings中的配置 | 
|---|
|  | 
5.4.3 重新构建工程
| build | 
|---|
|  | 
六、SpringBoot整合Mybatis
6.1 xml方式整合Mybatis
xml方式在编写复杂SQL时,更适合
6.1.1 导入依赖。
pom.xml
<!--        mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--        druid连接-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<!--        mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>
6.1.2 编写配置文件
准备实体类
@Data
public class Air  implements Serializable {
   
	private Integer id;
	private Integer districtId;
	private java.util.Date monitorTime;
	private Integer pm10;
	private Integer pm25;
	private String monitoringStation;
	private java.util.Date lastModifyTime;
}
// ================================================
@Data
public class District  implements Serializable {
   
	private Integer id;
	private String name;
}
6.1.3 准备Mybatis
// 1. 接口
public interface AirMapper {
   
    List<Air> findAll();
}
// 2. 在启动类中添加直接,扫描Mapper接口所在的包
@MapperScan(basePackages = "com.qf.firstspringboot.mapper")
// 3. 准备映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qf.firstspringboot.mapper.AirMapper">
<!--    List<Air> findAll();-->
    <select id="findAll" resultType="Air">
        select * from air
    </select>
</mapper>
yml配置文件
spring:
  datasource: # 连接数据库的信息
    url: jdbc:mysql://localhost:3306/2001
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
mybatis: # mybatis配置
  type-aliases-package: com.qf.sboothellowar.entity
  mapper-locations: mapper/*.xml
logging: # 日志配置
  level:
    com.qf.sboothellowar.mapper: debug
6.1.4 测试。
class AirMapperTest extends FirstSpringbootApplicationTests {
   
    @Autowired
    private AirMapper airMapper;
    @Test
    void findAll() {
   
        List<Air> list = airMapper.findAll();
        for (Air air : list) {
   
            System.out.println(air);
        }
    }
}
6.2 注解方式整合Mybatis
注解方式在编写配置简单,简单SQL推荐使用
6.2.1 创建District的Mapper接口
public interface DistrictMapper {
   
    List


















