1.SpringBoot引言

SpringBoot是由Privotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始化搭建以及开发过程.该框架使用了特定的方式进行配置,从而使开发人员不在需要定义模板话的配置.通过这种方式,SpringBoot致力于唉蓬勃发展的快速应用开发领域成为领导者.

也可以这样说:Spring Boot框架可用来做敏捷式开发

Spring Boot(微框架) = Springmvc(控制器)+Spring(项目管理)

2.Spring Boot的特点

1.创建独立的Spring应用程序
2.嵌入的Tomcat,无需部署War文件 —Spring Boot项目默认的打包方式是Jar,而且自身嵌入Tomcat,可以直接部署运行,而不需要额外的服务器
3.简化Maven配置–之前的Spring(Springmvc)项目需要的maven依赖很多,需要自己手动的自己引入,而且可能会导致依赖的冲突
4.自动配置的Spring,不需要管理大量的XML配置

3.Spring Boot的约定大于配置

项目目录结构:

  1. **项目目录结构**

SprinhgBoot笔记 - 图1

  • 要求有一个全局的入口类,注意存放的位置
  • 要求有一个名为application.yml或者application.properties的核心配置文件

4.Spring Boot环境搭建

SprinhgBoot笔记 - 图2

SprinhgBoot笔记 - 图3

SprinhgBoot笔记 - 图4

SprinhgBoot笔记 - 图5

运行成功!

5.Spring Boot的三种启动方式

  1. 运行启动类的main方法即可启动Spring Boot工程
  2. Spring Boot本身是一个maven工程,那么就可以使用maven的命令来运行Spring Boot工程

使用的命令是 mvn spring-boot:run

  1. 因为Spring Boot工程内嵌了Tomcat,那么就可以先把工程打包,然后在windows环境下直接运行

打包使用的命令是:mvn clean package

  1. 将打包好的jar包放到桌面(为了方便运行,就可以直接在桌面打开powerShell)
  2. 打开powerShell输入命令: java -jar 输入打包好的jar包的名字(可以使用 t补全) 然后运行
  • 那么后期我们将写好的Spring Boot项目,也就可以直接打包后放入到Linux的系统中,不需要像之前SSM项目那样额外的下载众多的容器环境

6.Spring Boot常用注解

6.1 @Configuration和@Bean

之前使用SSM开发时,我们需要在XML文件中编写bean标签 但是Spring Boot不推荐使用XML文件

@Configuration:代表当前是一个配置类,相当于beans标签

@Bean:创建一个实例,放到Spring容器中,相当于bean标签

  • id=“方法名|注解中的name属性(优先级更高)”
  • class=“方法的返回结果”

6.2@SpringBootApplication

**@SpringBootApplication**是一个组合注解

SprinhgBoot笔记 - 图6

@SpringBootConfiguration的源码

SprinhgBoot笔记 - 图7

发现其实际上就是一个Configuration注解,也就是说@SpringBootConfiguration也是配置注解,那么那么我们的启动类实际上就是一个配置类

@EnableAutoConfiguration注解

SpringBoot工程运行时,会自动运行一个SpringFactoriesLoader,加载META-INFO/spring.factories配置类(并不会全部加载,而是根据pom.xml文件中导入的依赖SpringBoot的配置都是可插拔的,可以根据需要开启或者不开启),通过SpringFactoriesLoader类中的load方法,以for循环的方式一个一个加载

实际上SpringBoot不需要我们编写一些配置文件,是因为在SpringBoot中已经为我们编写好了部分的配置文件,我们可以根据约定来开启即可.这就是SpringBoot的便利之处,同时,因为一些配置是默认的,我们有时候需要适当的做一些修改.

手动关闭自动装配指定内容 @SpringBootApplication(exclude=QuartzAutoConfiguration.class)

@ComponenScan

相当于 告诉要扫描的注解的包的位置 扫描的是该类所在包及其类所在的包的子包都会扫描

这也就是为什么我们要在启动类的同级创建包来写我们的代码,因为在启动类中有这个注解,会自动扫描注解,不需要我们在其他的类中多次的配置该注解

7.Spring Boot配置文件格式

默认情况下,Spring Boot给我们提供的是proerties的配置文件格式 Spring Boot也支持yml的配置文件格式,甚至支持json

推荐使用yml的配置文件格式

  1. yml会根据换行和缩进帮助管理配置文件的所在位置便于维护

当多次书写同一类的配置时,会自动的归类到同一个类别,这时方便管理和维护

2.yml相对于properties配置文件更加轻量化

yml因为有缩进和换行就去除了那些冗余的代码

注意:

  1. 书写yml配置文件时,一定要严格的遵循换行和缩进
  2. 在填写value时,一定要在:(冒号)后加上一个空格

8.Spring Boot的多环境配置

Spring Boot为我们部署项目时提供了一个多环境,也就是说在开发的时候可以指定多环境,在部署项目时,可以选择其中一个环境来部署

  1. applocation.yml文件中添加一个配置项:
  2. spring:
  3. profiles:
  4. active:具体的环境名

在resource目录下,创建多个application-环境名.yml文件即可

当项目启动时,就会根据application.yml中的配置,选择具体的环境去运行项目


在部署工程时:

通过java -jar jar文件 --spring.profiles.active=环境名

这样在部署项目时,就不需要修改配置文件,直接指定多个环境,在部署时选择其中一个

9.在外部使用配置文件的信息

第一种方式:

假如在yml配置文件中有这样的定义: picPath: D:\xxx\yyy

那么我们要在类中使用配置文件中的信息,这时使用:

@Value("${picPath}") private String picPath1;

这样就在java代码中使用picPath1接收了key值为picPath的值


当有多个相同的头的配置信息(且是多个时),我们使用第一种方式就有点麻烦,使用第二种方式:编写了大量的自定义配置,且具有统一的前缀时,可以采用如下的方式

比如: aliyun: aaaa:aaaaa bbbb:bbbbb cccc:ccccc dddd:ddddd

创建一个类

  1. @ConfigurationProperties(prefix=“aliyun”)
  2. public class AliyunProperties{
  3. private String aaaa;
  4. private String bbbb;
  5. //…
  6. //并提供get和set方法
  7. }

然后在需要使用aliyun配置文件的信息的地方,把之前创建的获取aliyun配置文件的类注入进去,就可以使用了

10.Spring Boot项目的热加载

当项目中的配置信息发生更改时,不需要重启项目

  1. 导入依赖
  1. <dependency>
  2. <groupId>org.springfranework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <optional>true</optional>
  5. </dependency>

2.修改Idea中的配置

SprinhgBoot笔记 - 图8

之后修改内容后,不需要重新启动项目,只需要将项目重新构建,就可以达到项目的热加载.

11.Spring Boot集成MyBatis

11.1导入依赖

  1. 因为是SpringBoot整合MyBatis,需要额外的导入相关的依赖
  2. 1.mysql数据库驱动
  3. 2.druid连接池
  4. 3.mybatis的依赖
  • 注意druid和mybatis的依赖都是使用的是Spring Boot的依赖,而不是单纯的自己的依赖

11.2编写配置文件

1. 整合Dao层的mybatis,那么首先需要实体类 2. 准备Mapper接口 配置扫描mapper接口所在的包 在启动类上配置注解 @MapperScan(basepackage=“包路径”) 3. 准备映射文件 也就使用的是XML的方式完成了SpringBoot的配置 添加yml的配置:因为我们使用了实体类的别名作为映射,而不是全路径,另外使用了驼峰映射 4. yml配置中编写连接数据库的信息

  1. mybatis:
  2. #扫描映射文件位置
  3. mapper-locations: classpath:mapper*.xml
  4. #配置别名
  5. type-aliases-package: per.leiyu.firstspringboot.entity
  6. #开启驼峰映射
  7. configuration: map-underscore-to-camel-case: true

yml配置中编写连接数据库的信息

  1. pring:
  2. datasource:
  3. driver-class-name: Driver.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql///air?serverTimeZone=UTC
  5. username: root
  6. password: 123456
  7. type: com.alibaba.druid.pool.DruidDataSource

12使用注解的方式整合MyBatis

使用Spring Boot的注解的方式整合MyBatis

1.创建实体类和Mapper接口 2.添加MyBatis注解 3.配置 4.测试

不需要额外的配置XML相关的配置(XML文件的书写和有关mapper.xml文件的扫描都不要配置)

使用Spring Boot的注解方式整合,Spring Boot提供了很多的注解方便使用

@Delete,@Select,@Updata,@Insert,但是仍然需要在启动类中添加@mapperScan注解,保证扫描mapper接口,不需要mapper.xml文件

  • 使用注解的方式整合mayatis,适合简单的sql语句
  • 当有复杂的sql语句时,我们推荐仍然使用mapper.xml的方式整合
  • Spring Boot支持同时使用注解和XML文件的方式整合mybatis

创建测试的简单方法:

在需要测试的类上右键—>创建测试.选择需要测试的方法——>测试.

设置测试的启动类为public,然后让创建的测试类继承测试的启动类即可.

12.1配置日志,查看执行的sql语句

  1. 就是把mapper包下(里面全是mapper接口)接口全部以DEBUG的方式输出就可以看到执行的SQL语句了
  1. logging:
  2. level: per.leiyu.firstboot.mapper: DEBUG

13.Spring Boot整合分页助手

1.导入依赖 2.配置application.yml

1.导入依赖

  1. <!-- pagehelper -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.3.1</version>
  6. </dependency>

2.配置application.yml

  1. # 分页框架
  2. pagehelper:
  3. #配置数据库类型
  4. helperDialect: mysql
  5. #3.3.0版本可用 - 分页参数合理化,默认false禁用
  6. #启用合理化时,如果pageNum<1 会查询第一页,如果pageNum>pages会查询最后一页
  7. #禁用合理化时,如果pageNum<1 或pageNum>pages会返回空数据
  8. reasonable: true
  9. #是否支持接口参数来传递分页参数,默认false
  10. supportMethodsArguments: true
  11. #3.5.0版本可用 - 为了支持startPage(Object params)方法
  12. #增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值
  13. #可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值
  14. params: count=countSql

3.service层控制逻辑

  1. @Override
  2. public PageInfo<Hotevents> queryLimt(String search, Integer start, Integer pageSize) {
  3. PageHelper.startPage(start, pageSize);
  4. List<Hotevents> hotevents = hoteventsDao.queryLimt(search);
  5. return new PageInfo<>(hotevents, pageSize);
  6. }

4.Controller层返回数据

  1. @ResponseBody
  2. @GetMapping("/api/getHotEventsList")
  3. public Map getHotEventsList(Integer curPage,Integer pageSize,String search){
  4. HashMap<String, Object> hashMap = new HashMap<>();
  5. PageInfo<Hotevents> pageInfo = this.hoteventsService.queryLimt(search, curPage, pageSize);
  6. hashMap.put("list",pageInfo.getList());//返回list
  7. hashMap.put("pageNum",pageInfo.getPageNum());//返回当前页数
  8. hashMap.put("pages",pageInfo.getPages());//返回总页数
  9. return hashMap;
  10. }

14.Spring Boot整合JSP

1.导入依赖

Spring Boot默认不支持JSP,因此我们需要导入JSP的依赖

2.创建webapp以及WEB-INFO去存放JSP页面

3.指定view的前缀和后缀

默认是也webapp下找JSP的页面,我们需要指定前缀,因为是jsp页面,我们为其指定后缀

  1. spring:
  2. mvc:
  3. view:
  4. prefix: /WEB-INFO/
  5. suffix: .jsp
  1. for(Air air : PageInfo.getList()){
  2. System.out.println(air);
  3. }
  1. # 14.Spring Boot整合JSP
  2. 1. **导入依赖**
  3. > Spring Boot默认不支持JSP,因此我们需要导入JSP的依赖
  4. 2. 创建webapp以及WEB-INFO去存放JSP页面
  5. 3. 指定view的前缀和后缀
  6. > 默认是也webapp下找JSP的页面,我们需要指定前缀,因为是jsp页面,我们为其指定后缀
  7. ```yml
  8. spring:
  9. mvc:
  10. view:
  11. prefix: /WEB-INFO/
  12. suffix: .jsp

15.thymeleaf的使用

1.导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

2.页面放在 templates包

image-20210929101110096

3.controller层返回

  1. @GetMapping("/index")
  2. public String index() {
  3. return "index";
  4. }

16.跳转jsp

image-20211007143650870

SprinhgBoot笔记 - 图11