当前位置:   article > 正文

Spring Boot 入门到精通(一)_springboot入门到精通.pdf

springboot入门到精通.pdf

一、Spring Boot 介绍

1. 概念

(1)什么是Spring Boot ?

  • Spring Boot是由Pivotal团队提供的全新框架,其中“Boot”的意思就是“引导”,意在简化开发模式,使开发者能够快速的开发出基于Spring 的应用
  • Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

(2)Spring Boot 特点

  • 嵌入的 Tomcat,无需部署 WAR 文件
  • 简化Maven配置
  • 自动配置Spring
  • 约定大于配置
  • 依赖传递

2.maven构建Spring Boot项目

(1)创建maven工程,不要使用骨架
(2)编写pom.xml文件,继承springboot父工程

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.3.4.RELEASE</version>
</parent>
  • 1
  • 2
  • 3
  • 4
  • 5

(3)设置jdk版本,添加启动器

<dependencies>
     <!--  springboot的web启动器-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(4)创建启动类

  • @SpringBootApplication: 当前类是一个引导类(此注解中使用诸多元注解修饰
  • SpringApplication.run(Application.class, args); 其返回值是一个Spring容器(ApplicationContext实现类
  • 启动类存放位置: 放置在所有代码父包同级目录下
package com.qfedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(5)SpringBoot 启动器概述

  • 所谓的springBoot 启动器其实就是一些 jar包的集合,SprigBoot一共提供 44 个启动器。例如:

    • spring-boot-starter-web:支持全栈式的 web 开发,包括了 tomcat 和 springMVC 等 jar

    • spring-boot-starter-jdbc:支持 spring 以 jdbc 方式操作数据库的 jar 包的集合

    • spring-boot-starter-redis:支持 redis 键值存储的数据库操作

3. 自定义banner

  • 自定义SpringBoot项目启动时,所打印的形状
  • banner.txt 放置在resources 目录下
  • 示例:
                           _ooOoo_
                          o8888888o
                          88" . "88
                          (| -_- |)
                          O\  =  /O
                       ____/`---'\____
                     .'  \\|     |//  `.
                    /  \\|||  :  |||//  \
                   /  _||||| -:- |||||-  \
                   |   | \\\  -  /// |   |
                   | \_|  ''\---/''  |   |
                   \  .-\__  `-`  ___/-. /
                 ___`. .'  /--.--\  `. . __
              ."" '<  `.___\_<|>_/___.'  >'"".
             | | :  `- \`.;`\ _ /`;.`/ - ` : | |
             \  \ `-.   \_ __\ /__ _/   .-` /  /
        ======`-.____`-.___\_____/___.-`____.-'======
                           `=---='
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
               // 佛祖保佑 永不宕机 永无BUG //
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

4. Spring Boot的全局配置文件

(1)配置文件命名

  • SpringBoot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下
  • 源码:
    在这里插入图片描述

(2)yml配置文件

  • yml是 Spring Boot 中新增的一种配置文件格式。
  • 特点:具备天然的树状结构
  • yml与 properties的区别
    • 配置文件的扩展名有变化
    • 配置文件中的语法有变化:
      • 在 yml 中使用“ ”进行分割
      • 在 yml中缩进时不允许使用tab键,缩进的空格数不重要,只要是左对齐的一列数据,都是同一个层级
      • 每个K的冒号后面一定要加一个空格

(3)配置文件示例:

server:
  port: 8090	#端口号
  servlet:
    context-path: /springboot	#项目名
    
spring:
  datasource:	#数据库连接
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    password: 123456

#配置mybatis
mybatis:
  type-aliases-package: com.qfedu.pojo
  mapper-locations: classpath:mapper/*Mapper.xml

#配置日志
logging:
  level:
    com.qfedu.aop: debug
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

5. Spring Boot项目的发布方式

  • 通过jar包发布

(1)在pom中添加一个SpringBoot的构建的插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(2)在maven面板视图中,选择“package”,在target中会产生xxx.jar包
在这里插入图片描述

(3)然后在cmd终端发布项目(jar包所在目录)

  • java -jar xxx.jar
    在这里插入图片描述

二、Spring Boot注入方式

  • 如何将将配置文件相关信息注入到数据源?????

  • 全局配置文件:application.properties,写入数据库信息
    在这里插入图片描述

1. @Value方式

SpringBoot配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:

  • @Configuration:声明一个类作为配置类,代替xml文件

  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签

  • 使用全局配置文件:application.properties,不用显式引用配置文件(不需要使用注解@PropertySource),便可以直接使用全局配置文件信息

  • 配置数据源

@Configuration
public class JdbcConfiguration {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2. @ConfigurationProperties方式

  • 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到属性中(从全局配置文件中读取:application.properties)
  • 创建属性读取类
    在这里插入图片描述

(1)配置数据源 —— @Autowired注入

@Configuration
public class JdbcConfiguration {

    @Autowired
    private DbProperties dbProperties;

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(dbProperties.getUrl());
        dataSource.setDriverClassName(dbProperties.getDriverClassName());
        dataSource.setUsername(dbProperties.getUsername());
        dataSource.setPassword(dbProperties.getPassword());
        return dataSource;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

(2)配置数据源 —— @Bean方法的参数注入

@Configuration
public class JdbcConfiguration {

    @Bean
    //会去Spring容器中找到一个同类型的bean,注入到参数中
    public DruidDataSource dataSource(DbProperties dbProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(dbProperties.getUrl());
        dataSource.setDriverClassName(dbProperties.getDriverClassName());
        dataSource.setUsername(dbProperties.getUsername());
        dataSource.setPassword(dbProperties.getPassword());
        return dataSource;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. SpringBoot默认注入方式

  • 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource属性中
@Configuration
public class JdbcConfiguration {
    
    @Bean
    // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4. SpringBoot中的默认配置

  • 我们的项目中,已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:
    在这里插入图片描述
    非常多,几乎涵盖了现在主流的开源框架,例如:
    • redis
    • jms
    • amqp
    • jdbc
    • jackson
    • mongodb
    • jpa
    • solr
    • elasticsearch
      … 等等

三、Spring Boot自动装配原理

  • Springboot的自动装配实际上是通过 @EnableAutoConfiguration注解实现的,它用于修饰@SptingBootApplication注解
  • 在@EnableAutoConfiguration中,通过@Import注解引入AutoConfigurationImportSelector类,在AutoConfigurationImportSelector类中提供了一个方法selectImports,通过此方法实现按需加载
  • selectImports方法中,会根据引入的启动器,去加载/META-INF/目录下spring.factories文件中的部分配置类
  • 在spring.factories文件中含有诸多的xxxAutoConfiguration配置类,在此配置类中会含有@ConditionalOnxxx注解,SpringBoot通过此注解实现按需加载,自动装配所需要的Bean

四、Spring Boot 整合Thymeleaf

1.Thymeleaf介绍

(1)什么是Thymeleaf

  • Thymeleaf 是一个跟 Velocity、FreeMarker 类似的用Java语言编写的模板引擎,它基于模板数据生成输出文本(HTML网页、WORD、XML,PDF或Java等)。
    在这里插入图片描述

(2)为什么要使用Thymeleaf

  • jsp访问实现页面展示,需要一系列编译,苏剧极慢
  • 一般情况下只用于单体项目或后端数据测试
    在这里插入图片描述

(3)thymeleaf的启动器

<!-- thymeleaf的启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

(4)thymeleaf默认配置文件

  • 导入相关启动器后,可以直接查询 XXXAutoConfiguration ,其中必定含有XXXProperties类,其里面含有相关默认配置

hymeleaf也会根据前缀和后缀来确定模板文件的位置:

在这里插入图片描述

  • 默认前缀:classpath:/templates/
  • 默认后缀:.html

Thymelaef特点:

  • 语法:通过他特定标签操作html属性

  • 目录位置:src/main/resources/templates

  • 后缀名:.html

  • 注意,把html 的名称空间,改成:xmlns:th="http://www.thymeleaf.org" 会有语法提示

2. Thymeleaf 基本语法

(1)变量输出

  • th:text 在页面中输出值
<span th:text="Hello"></span>
<hr/>
<span th:text="${msg} "></span>
  • 1
  • 2
  • 3
  • th:value 可以将一个值放入到input标签的value中
<input type="text" name="username" th:value="${msg}"/>
  • 1

(2)日期和字符串处理

  • Thymeleaf 内置对象

  • 注意语法:

    • 调用内置对象一定要用#

    • 大部分的内置对象都以 s 结尾 strings、numbers、dates

    • ${}表达式一定是在""中生效的

日期处理:

  • ${#dates.format(birth,‘yyyy-MM-dd’) 按照自定义的格式做日期转换(日期回选)
<input type="date" name="birth" th:value="${#dates.format(birth,'yyyy-MM-dd')}"/>
  • 1

字符串处理:

<input type="text" name="msg" th:value="${#strings.substring(msg,0,6)}"/>
  • 1

(3)条件判断

  • th:if :判断条件是否满足
<span th:if="${sex=='男'}">
        性别:男
</span>
  • 1
  • 2
  • 3

(4)单选框按钮选中判断

  • th:checked :其内取值为boolean型,true则选中,false则补选中
性别:<input type="radio" name="sex" value="1" th:checked="${user.sex==1}"/><input type="radio" name="sex" value="0" th:checked="${user.sex==0}"></br>
  • 1
  • 2

(5)迭代遍历

  • th:each :实现集合遍历
<tr th:each="user : ${users}">
            <td th:text="${user.id}"></td>
            <td th:text="${user.userName}"></td>
            <td th:text="${user.password}"></td>
            <td th:text="${user.sex==1?'男':'女'}"></td>
            <td th:text="${#dates.format(user.birth,'yyyy-MM-dd')}"></td>
            <td>
                <button>删除</button>&nbsp;&nbsp;&nbsp;&nbsp;
                <a th:href="@{/user/findOne/{id}(id=${user.id})}"><button>编辑</button></a>
            </td>
        </tr>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(5)URL表达式

  • url表达式语法: 基本语法:@{}
    • / :相当于当前项目的跟
      在这里插入图片描述
    • ~/ :相当于服务器的跟在这里插入图片描述
  • 在 url中实现参数传递
    • 问号形式传参
      在这里插入图片描述
    • restful风格传参
      在这里插入图片描述
    • 域中参数回传(restful 风格)
      在这里插入图片描述

3. Thymeleaf 视图解析器优先级

(1)ThymeleafViewResolver视图解析器

  • Thymeleaf 启动器默认含有一个视图解析器 —— ThymeleafViewResolver
  • 当我们不使用 Thymeleaf 启动器时,SpringBoot 默认使用的视图解析器(ViewResolver)是 —— SpringMVC的视图解析器
  • 当引入Thymeleaf 启动器之后,ThymeleafViewResolver的优先级会高于SpringMVC的视图解析器(查看ThymeleafAutoConfiguration源码可知)
    在这里插入图片描述

(2)Spring Boot 使用的视图解析器

  • 若引用Thymeleaf 启动器后,默认会使用Thymeleaf的视图解析器,返回的视图、ModelAndView、Model等均使用templates文件夹 下的资源不会访问Spring Boot的静态资源
  • 若不引用Thymeleaf 启动器,则默认使用SpringMVC的视图解析器,但其默认的后缀不是.html结尾
  • 体现:
    • SpringMVC的视图解析器后缀不是 —— .html,默认templates文件夹中的页面后缀是.html,且名称相同时,templates文件夹中的页面优先级高(引用Thymeleaf 启动器后)

    • 只要存在Thymeleaf相关依赖,若是视图名称和templates文件夹中的页面名称相同,返回扫描templates文件夹中的页面就会优于静态资源下的视图页面(就算在配置文件中指定返回的后缀(spring.mvc.view.suffix=),SpringMVC视图解析器也不会生效)

    • 若存在Thymeleaf相关依赖,想要实现页面跳转(跳转到静态资源包下),可以直接return /页面.html

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号