Spring Boot 入门到精通(一)

news2024/11/19 9:41:37

文章目录

  • 一、Spring Boot 介绍
    • 1. 概念
    • 2.maven构建Spring Boot项目
    • 3. 自定义banner
    • 4. Spring Boot的全局配置文件
    • 5. Spring Boot项目的发布方式
  • 二、Spring Boot注入方式
    • 1. @Value方式
    • 2. @ConfigurationProperties方式
    • 3. SpringBoot默认注入方式
    • 4. SpringBoot中的默认配置
  • 三、Spring Boot自动装配原理
  • 四、Spring Boot 整合Thymeleaf
    • 1.Thymeleaf介绍
    • 2. Thymeleaf 基本语法
    • 3. Thymeleaf 视图解析器优先级

一、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>

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

<dependencies>
     <!--  springboot的web启动器-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
</dependencies>

(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);
    }
}

(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 //

在这里插入图片描述

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

5. Spring Boot项目的发布方式

  • 通过jar包发布

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

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(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;
    }
}

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;
    }
}

(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;
    }
}

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;
    }
}

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>

(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>
  • th:value 可以将一个值放入到input标签的value中
<input type="text" name="username" th:value="${msg}"/>

(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')}"/>

字符串处理:

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

(3)条件判断

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

(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>

(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>

(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element组件库的用法步骤

Element地址&#xff1a;适用于pc端后台开发 Element - The worlds most popular Vue UI frameworkElement&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.eleme.io/#/zh-CN/ 下载 点击 “组件”在安装部分有下载命令&#xf…

东京大学和积水房屋启动生物多样性和健康联合研究

东京大学农业与生命科学研究生院(GSALS)和积水房屋株式会社(Sekisui House, Ltd.)将于2022年12月1日启动关于生物多样性和人类健康的联合研究项目。该项目将调查生物多样性和城市自然环境对人类健康和幸福的益处。这项全球首创的举措将全面调查居民与附近生物多样性丰富的花园环…

Java入门教程(17)——循环语句

文章目录1.while 循环2. do-while 循环3. for 循环我们表白的时候&#xff0c;你可以做我女朋友么&#xff0c;这次拒绝了&#xff0c;下次“你可以做我女朋友么”&#xff0c;直到同意做你女朋友。以后就不会再问了&#xff0c;这就是循环1.while 循环 语法结构&#xff1a; w…

从“挖土豆”到全场景营销,纷享销客CRM如何助力噢易云可持续增长?

近年来&#xff0c;随着云计算技术的发展和普及&#xff0c;桌面云也得到了越来越广泛的应用&#xff0c;尤其是在教育、医疗、金融、能源、连锁等对安全、成本和系统化管控有着强要求的行业中。 根据第三方研究机构的统计&#xff0c;2021年中国桌面云整体解决方案销量达到了…

Java Object类常用API

JavaObject类常用API\huge{Java\space Object类常用API}Java Object类常用API API 首先解释一下什么是APIAPIAPI。 API(ApplicationProgramminginterface)API(Application Programming interface)API(ApplicationProgramminginterface)&#xff1a;应用程序编程接口。 简单来…

docker 查看容器启动命令(已运行的容器)

eg: 1 docker ps 查看正在运行的容器: 通过docker ps命令 该命令主要是为了详细展示查看运行时的command参数 docker ps -a --no-trunc | grep container_name # 通过docker --no-trunc参数来详细展示容器运行命令 通过docker inspect命令 使用docker inspect&#xff0c;但…

Letbook Cookbook题单——数组3

Letbook Cookbook题单——数组3 48. 旋转图像 难度中等 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a;…

左(7)--kmp,manacher,morris

前言 仅记录学习笔记&#xff0c;如有错误欢迎指正。 题目&#xff1a; 思路&#xff1a;实现1个函数infect()&#xff0c;把1连接的位置都变为2&#xff0c;此时算一个岛。 如何设计一个并行算法解决这个问题&#xff1f; 在多个cpu中 每次存入分界线的信息&#xff0c;…

拓扑排序与关键路径

一、拓扑排序 1.1 什么是拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若边<u,v>∈E(G)&#xff0c;则u在线性序列中出现在v之前。通常&#x…

入驻淘宝成人用品店铺要什么证件?

在淘宝店铺开一家淘宝店铺&#xff0c;必须要有成人用品特种经营许可证&#xff0c;没有申请成人用品特种经营许可证的店铺&#xff0c;在淘宝上是发布不了成人用品类目宝贝的&#xff0c;那么&#xff0c;有的店主就有疑问了&#xff1a;成人用品特种经营许可证要在哪里去申请…

基于Spring Boot+Vue+MySQL的理财平台的设计与实现

目 录 摘 要 I Abstract II 目 录 III 图清单 V 表清单 VII 1 绪论 1 1.1 理财平台的现状与发展 1 1.2吾爱理财平台的研究内容 2 1.3 吾爱理财平台的研究目的和意义 2 1.4 本章小结 3 2 本吾爱理财平台的分析 4 2.1 可行性分析 4 2.2 需求分析 4 2.3 框架介绍 6 2.4 本章小结 …

商用、无版权图片素材网站,赶紧马住。

很多朋友不知道去哪里找图片素材&#xff0c;网上找的质量不高先不说&#xff0c;就怕使用不当造成侵权。今天给大家分享6个可商用&#xff0c;还高质量的图片素材网站。1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx菜鸟图库网站素材类型很多&#xff0c;像设计、…

【Python游戏】Python实现一个植物大战僵尸小游戏,非常简单,可以用于做毕业设计哟 | 附源码

前言 halo&#xff0c;包子们下午好 今天给打击整一个植物大战僵尸 无广告版本 哈哈 说实话&#xff0c;现在的小游戏很多都是有广告&#xff0c;多少有点难受 今天给大家直接安排 相关文件 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 源码点…

一篇博客总结深度学习与反向传播

目录 深度学习的发展过程 深度学习的步骤 定义Neural NetWork 全前向连接 softmax介绍 定义loss函数 定义优化器选择最优参数optimization 反向传播Backpropagation 深度学习介绍 反向传播视频 深度学习的发展过程 perceptron(liner model)感知机——线性模型 perc…

知识图谱-KGE-语义匹配-双线性模型-2018:CP

【paper】 Canonical Tensor Decomposition for Knowledge Base Completion【简介】 这篇是 Facebook 法国巴黎 AI 研究中心发表在 ICML 2018 上的文章&#xff0c;是对传统的张量分解方法 CP&#xff08;Canonical Tensor Decomposition&#xff09;做的分析改进。对传统的几个…

泛微文书定确保电子档案移交接收过程:真实、完整、可用和安全

电子档案的移交接收是电子档案管理流程的重要环节之一。 国家档案局发布的《电子档案移交接收操作规程》中明确了电子档案移交接收的工作流程&#xff0c;规定了电子档案移交接收准备工作和电子档案移交接收操作的要求。 在移交接收过程中&#xff0c;如何快速处理大量的电子…

当软件测试迭代测试时间不够时该如何去做好质量控制呢?

大家好&#xff0c;今天我们一起来聊聊&#xff0c;当我们在工作中尤其是快速迭代版本中测试版本的时间被压缩的很短&#xff0c;甚至不够完成用例执行时怎么去做好质量控制呢&#xff1f; 在我们的日常生活中导致软件测试时间不够的原因有很多&#xff0c;那么在这些不确定的人…

客快物流大数据项目(九十二):ClickHouse的MergeTree系列引擎介绍和MergeTree深入了解

文章目录 ClickHouse的MergeTree系列引擎介绍和MergeTree深入了解 一、MergeTree系列引擎介绍 二、​​​​​​​MergeTree深入了解 1、创建MergeTree表的说明 2、创建MergeTree引擎的表 3、删除MergeTree引擎的表 ClickHouse的MergeTree系列引擎介绍和MergeTree深入了解…

【数据库数据恢复】MySQL数据库误删除未备份的数据恢复案例

MySQL数据库属于关系型数据库。SQL是一种用于操作关系型数据库的结构化语言。关系型数据库就是指在关系模型的基础上建立起来的数据库&#xff0c;是一种借助了集合代数等一些数学方法和数学概念处理数据的数据库。 MySQL数据库具有体积小&#xff0c;速度快&#xff0c;性价比…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.2 界面布局

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1fR4y1k7Kt 上节课&#xff0c;初步展示了本章要实现的效果。本节课开始&#xff0c;就从零新建工程&#xff0c;把效果一一实现 首先先把界面搭建起来&#xff0c;也就是把用到的 Label、ComboB…