SpringBoot(1)基础入门

SpringBoot基础入门

  • SpringBoot项目创建方式
    • Idea创建
    • SpringBoot官网创建
    • 基于阿里云创建项目
    • 手工搭建
  • SpringBoot启动
    • parent
    • starter
    • 引导类
    • 内嵌tomcat
  • 基础配置
    • 属性配置
    • 配置文件分类
    • yaml文件
    • yaml数据读取
  • 整合第三方技术
    • 整合JUnit
    • 整合MyBatis
    • 整合Mybatis-Plus
    • 整合Druid

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化 Spring应用的初始搭建以及开发过程

  • Spring程序缺点
    • 依赖设置繁琐
    • 配置繁琐
  • SpringBoot程序优点
    • 起步依赖(简化依赖配置)
    • 自动配置(简化常用工程相关配置)
    • 辅助功能(内置服务器,……)

SpringBoot项目创建方式

Idea创建

1.创建新模块,选择Spring Initializr,并配置模块相关基础信息
在这里插入图片描述
2.选择当前模块需要使用的技术集
在这里插入图片描述
3.开发控制器

@RestController
@RequestMapping("/books")
public class BookController {

    @GetMapping
    public String getById(){
        System.out.println("Springboot is running....");
        return "Springboot is running....";
    }
}

4.运行自动生成的Application类
在这里插入图片描述

最简SpringBoot程序所包含的基础文件:

  • pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <relativePath/> 
     <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>springboot_01-01_quickstart</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_01-01_quickstart</name>
    <description>springboot_01-01_quickstart</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • Application类
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Spring程序与SpringBoot程序对比:
在这里插入图片描述
总结:

  1. 开发SpringBoot程序可以根据向导进行联网快速制作
  2. SpringBoot程序需要基于JDK8进行制作
  3. SpringBoot程序中需要使用何种功能通过勾选选择技术
  4. 运行SpringBoot程序通过运行Application程序入口进行

注意: 基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构

SpringBoot官网创建

1.进入SpringBoot官网找到Spring Initializr
在这里插入图片描述
2.进入创建页面,创建工程,并保存项目,解压项目,通过IDE导入项目。
在这里插入图片描述

基于阿里云创建项目

之前https://start.spring.io/很容易网速慢,通过阿里云来提升速度
在这里插入图片描述

手工搭建

1.手动导入坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.5.4</version>
	</parent>
	<groupId>com.itheima</groupId>
	<artifactId>springboot_01_03_quickstart</artifactId>
	<version>1.0-SNAPSHOT</version>
<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>
</project>

2.手工创建引导类

package com.itheima;
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);
}
}

tips:隐藏文件,避免页面杂乱
在这里插入图片描述
Setting → File Types → Ignored Files and Folders
输入要隐藏的文件名,支持*号通配符
回车确认添加
在这里插入图片描述

SpringBoot启动

parent

parent元素是一种Maven的继承机制,用于指定项目的父级依赖。它提供了一个基础配置,包括默认的插件、依赖和配置信息。子项目可以通过继承父项目的pom.xml文件来使用相同的配置和依赖项,从而减少了代码冗余和重复配置的工作量(仅定义未使用)。
使用Spring Boot的parent元素可以让我们更方便地使用Spring Boot提供的各种功能和依赖库,同时避免多个依赖使用相同技术时出现依赖版本冲突。
继承parent的形式也可以采用引入依赖(spring-boot-dependencies)的形式实现效果
在这里插入图片描述

starter

starter是一种依赖库,它提供了一组预配置的依赖项和默认设置,以满足特定的需求。这些starters通常包含了常见的依赖项(例如Spring框架核心、数据库驱动程序、Web容器等),并为它们提供了默认的配置信息,以帮助我们快速地开始项目开发。
使用Spring Boot的starter可以简化项目配置和管理,避免许多麻烦和复杂性,并提高开发效率和生产力。例如,如果我们要创建一个基于Web的Spring Boot应用程序,可以使用Spring Boot Web Starter来获取所需的所有依赖项和默认配置,从而减少了许多手动配置的工作量。
在这里插入图片描述

  • starter
    • SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
  • parent
    • 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
    • spring-boot-starter-parent各版本间存在着诸多坐标版本不同

实际开发

  • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
  • 如发生坐标错误,再指定Version(要小心版本冲突)

引导类

SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目,但是未启动web服务器
SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean。

@SpringBootApplication
public class Springboot01QuickstartApplication {
	public static void main(String[] args) {
	SpringApplication.run(Springboot01QuickstartApplication.class, args);
	}
}

内嵌tomcat

内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理。
在这里插入图片描述
变更内嵌服务器思想是去除现有服务器,添加全新的服务器

  <dependency>
	   <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       	<exclusions>
                <exclusion>
                    <!--排除tomcat依赖-->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
       			 </exclusion>
       </exclusions>
 </dependency>
<!--引入jetty,版本由start控制-->
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

在这里插入图片描述
内置服务器

  • tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件
  • jetty:更轻量级,负载性能远不及tomcat
  • undertow:负载性能勉强跑赢tomcat

基础配置

属性配置

SpringBoot(官方文档)默认配置文件application.properties,通过键值对配置对应属性。

  • SpringBoot中导入对应starter后,提供对应配置属性
  • 书写SpringBoot配置采用关键字+提示形式书写

修改服务器端口:server.port=80
关闭运行日志图标:spring.main.banner-mode=off

配置文件分类

SpringBoot提供了多种属性配置方式:
在这里插入图片描述

主流格式为yml,层级编写,避免重复写。
在这里插入图片描述

SpringBoot配置文件加载顺序:

  • application.properties > application.yml > application.yaml
  • 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

解决配置文件自动提示消失
1.Setting → Project Structure → Facets,选中对应项目/工程
在这里插入图片描述
2.Customize Spring Boot
在这里插入图片描述
3.选择配置文件
在这里插入图片描述

yaml文件

YAML(YAML Ain’t Markup Language),一种数据序列化格式

  • 优点:
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式
  • YAML文件扩展名
    • .yml(主流)
    • .yaml

在这里插入图片描述
yaml语法规则:

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释
  • 核心规则:数据前面要加空格与冒号隔开

字面值表示方式

boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区

数组表示方式: 在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

subject:
 - Java
 - 前端
 - 大数据
enterprise:
 name: itcast
 age: 16
 subject:
  - Java
  - 前端
  - 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式
 - name: Tom
   age: 4
 - name: Jerry
  age: 5
users: #对象数组格式二
 -
  name: Tom
  age: 4
 -
  name: Jerry
  age: 5 #对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]

yaml数据读取

1.使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
在这里插入图片描述
2.在配置文件中可以使用属性名引用方式引用属性,避免数据都需要修改
在这里插入图片描述

# 使用%{属性名}引用数据
daseDir: c\windows
tempDir: ${daseDir}\temp

3.属性值中如果出现转移字符,需要使用双引号包裹

# 转义字符,用双引号包起来
tempDir1: "${daseDir}\temp \t1 \t2"
#dir1:c\windows	emp 	1 	2

4.封装yaml中的全部数据到Environment对象

  //使用自动装配将所有的数据封装到一个对象Environment中
  @Autowired
  private Environment env;

在这里插入图片描述
5.自定义对象封装指定数据

# 创建类,用于封装性下面的数据
# 由spring加载数据到对象中,一定要告诉spring加载这组信息
# 使用时候从spring中直接获取信息使用
datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql://172.16.36.214:3306/r_framework?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false
  username: yushui
  password: Yushui.123
//1.定义数据模型(实体类)对yaml文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
    //属性名与名称一致
    private String driver;
    private String url;
    private String username;
    private String password;
    ....
    }

整合第三方技术

整合JUnit

Spring Initializr默认整合Junit

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
</dependency>

测试类:

//设置JUnit加载的SpringBoot启动类
@SpringBootTest(classes = Application.class)
class ApplicationTests {

	//使用自动装配的形式添加要测试的对象
	@Autowired
	private UserService userService;
    @Test
    void contextLoads() { }
}

测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类。

整合MyBatis

1.创建新模块,选择Spring初始化,并配置模块相关基础信息
在这里插入图片描述
选择当前模块需要使用的技术集(MyBatis、MySQL)
在这里插入图片描述
2.设置数据源参数

spring:
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/ssm_db
   username: root
   password: root

3.定义数据层接口与映射配置

@Mapper
public interface UserDao {
	@Select("select * from user")
	public List<User> getAll();
}

4.测试类中注入dao接口,测试功能

@SpringBootTest
class Springboot08MybatisApplicationTests {
	@Autowired
	private BookDao bookDao;
	@Test
	public void testGetById() {
		Book book = bookDao.getById(1);
		System.out.println(book);
	}
}

注意:
SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区

jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC

或在MySQL数据库端配置时区解决此问题:
MySQL的安装目录my.ini文件且打开它,找到 mysqld,在该下面添加 default-time_zone = ‘+8:00’,然后保存。
在这里插入图片描述

整合Mybatis-Plus

导入坐标:由于SpringBoot中未收录MyBatis-Plus的坐标版本,需要指定对应的Version

 <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
 </dependency>

2.定义数据层接口与映射配置,继承BaseMapper

@Mapper
public interface UserDao extends BaseMapper<User> {
}

3.其他同SpringBoot整合MyBatis

整合Druid

1.导入Druid对应的starter

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.2.6</version>
</dependency>

2.变更Druid的配置方式

spring:
 datasource:
  druid:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
    username: root
    password: root

整合任意第三方技术

  • 导入对应的starter
  • 配置对应的设置或采用默认配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运动健康路线导入,助力用户轻松导航

华为HMS Core运动健康服务支持通过REST API&#xff0c;以GPX文件格式写入用户路线数据&#xff0c;支持导入轨迹&#xff08;Track&#xff09;或路程&#xff08;Route&#xff09;类型的数据&#xff0c;实现用户路线数据在华为运动健康App中的展示效果。 假若与华为运动健…

​selenium+python做web端自动化测试框架与实例详解教程​

下面有详细的代码介绍&#xff0c;如果不是很明白的话&#xff0c;可以看看这套视频&#xff0c;在哔站学习人数超过数万人&#xff01; 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10年的大佬出的W…

分享NVIDIA GTC干货_用软件引领车辆电子架构

随着软件定义功能变得更多&#xff0c;车辆电气/电子架构正在从分布式计算演变为集中式计算。通过将这台集中式超级计算机与人工智能融合在一起&#xff0c;开发模块化软件并创建数据中心基础设施。 电子架构 EEA(Electrical and Electronic Architecture) 首先介绍下EEA&am…

Ansys Zemax | 如何建模离轴抛物面镜

离轴抛物面反射镜是光学工业中一种重要的设计类型。本文演示了如何根据制造商给出的规格设计一个离轴抛物面反射镜&#xff0c;并演示如何使用主光线求解将像面中心与主光线路径对齐。(联系我们获取文章附件) 简介 离轴抛物面反射镜的优点是光束通过反射到达像面途中将不会受…

Winform控件开发(25)——TabControl(史上最全)

一、属性 1、Name 用于获取控件对象 2、AllowDrop 指示用户是否可以拖动数据到TabCotrol上 3、TabCotrol 3.1 Top 沿控件的底部放置选项卡 3.2 Left 沿控件的左边缘放置选项卡 3.3 Right 沿控件的右边缘放置选项卡 3.4 Bottom 沿控件的顶部放置选项卡 4、Anchor 锚定控件…

第18章_MySQL8其它新特性

第18章_MySQL8其它新特性 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;…

新一轮商业革命将至,张勇用“敏捷组织”率先交出答卷

一向拥抱变化的阿里再一次拥抱变化。2023年3月28日&#xff0c;阿里宣布了新的组织变革&#xff0c;这应该是迄今为止&#xff0c;阿里最重要的组织变革&#xff0c;其变革力度之大堪称前所未有。具体而言&#xff0c;阿里集团将设立云智能、淘宝天猫商业、本地生活、国际数字商…

口罩检测——环境准备(1)

文章目录前言一、工具及环境要求工具本地环境要求二、工具介绍1.labelimg2.AI Studio3.YOLO2COCO4.PaddleUtils5.paddleyolo三、库的安装总结前言 小编之前做过一期《OpenVINO-yolov5推理》&#xff0c;点开博客自动播放视频甚至有点吵&#xff0c;想过删掉&#xff0c;但是想到…

Day924.自动化测试 -系统重构实战

自动化测试 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于自动化测试的内容。 自动化测试是一个很容易产生“争议”的话题&#xff0c;也经常会有一些很有意思的问题。 自动化测试不是应该由测试同学来编写吗&#xff0c;开发是不是没有必要学吧&#xff1f;之前…

Lesson 9.1 集成学习的三大关键领域、Bagging 方法的基本思想和 RandomForestRegressor 的实现

文章目录一、 集成学习的三大关键领域二、Bagging 方法的基本思想三、RandomForestRegressor 的实现在开始学习之前&#xff0c;先导入我们需要的库&#xff0c;并查看库的版本。 import numpy as np import pandas as pd import sklearn import matplotlib as mlp import sea…

【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点

&#x1f340; 写在前面 这篇5000多字博客也花了我几天的时间&#x1f602;&#xff0c;主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻&#xff0c;欢迎关注我哟】&#xff0c;当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字&#xff0c;错别字可…

Linux常用命令——ldconfig命令

在线Linux命令查询工具 ldconfig 动态链接库管理命令 补充说明 ldconfig命令的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下&#xff0c;搜索出可共享的动态链接库&#xff08;格式如lib*.so*&#xff09;,进而创建出动态装入程…

python框架有哪些,常用的python框架代码

Python的应用已经相当广泛了&#xff0c;可以做很多事情&#xff0c;而 Python本身就是一个应用程序&#xff0c;我们也可以说 Python是一个高级语言。由于 Python有很多包&#xff0c;所以我们不能把所有的 Python包都了解一下&#xff0c;也不能把所有的包都读一遍&#xff0…

35岁大龄程序员职业转型规划

35岁大龄程序员职业转型规划 I. 引言 在当今快速发展的IT行业&#xff0c;程序员这个职业变得越来越重要。但是&#xff0c;对于35岁以上的程序员来说&#xff0c;面临的职业困境也越来越严峻。他们不仅面临着技术的迭代更新&#xff0c;而且还面临着市场的竞争和年轻程序员的…

碳交易机制下考虑需求响应的综合能源系统优化运行

说明书 资源链接&#xff1a;https://download.csdn.net/download/qq_50594161/87610405https://download.csdn.net/download/qq_50594161/87610405 https://download.csdn.net/download/qq_50594161/87607550https://download.csdn.net/download/qq_50594161/87607550https:…

String源码深度刨析

前言 我们将从源码角度深度分析特点&#xff0c;来提升对他们的了解以及设计。 String、StringBuilder、StringBuffer的常见面试题及四大区别可以参考&#xff1a;String、StringBuilder、StringBuffer的四大区别解析 String public final class Stringimplements java.io.Se…

在JavaScript开发中,关于var、let和const你需要知道这些

文章目录&#x1f4cb;前言&#x1f3af;var&#x1f3af;let&#x1f3af;const&#x1f3af;相关面试题&#x1f4dd;总结&#x1f4cb;前言 计算机编程中最基本的一个就是使用名字&#xff08;或标识符&#xff09;表示值。绑定名字和值为我们提供了一种引用值和在程序中使…

阿里云ECS大测评

本篇博客是阿里云 ECS实例测评&#xff0c;这里采用阿里的C5.large计算型实例 本次对云服务器ECS产品能力的体验和建议&#xff0c;可帮助其他用户选用云服务,使用云服务器ECS创建应用场景测评 首先对实例的硬件(CPU&#xff0c;内存&#xff0c;磁盘)进行测试&#xff0c;采…

数智未来·持续创新 | 易趋受邀出席DSMC 2023中国制造业数智峰会

3月17日-18日&#xff0c;以“数智未来持续创新”为主题的DSMC 2023中国制造业数智峰会在长沙成功召开。由中国通信工业协会指导&#xff0c;信息侠主办&#xff0c;湖南省数字经济促进会、浙江省数字经济联合会、安徽省首席信息官协会联合支持。鉴于易趋项目管理软件在制造行业…

数据出境是什么意思?我国数据出境合规要求是什么?

随着经济全球化深入以及云计算等技术的发展&#xff0c;数据在全球范围跨境流动。数据跨境在促进经济增长、加速创新的同时&#xff0c;对数据主权、数据权属、个人信息保护等一系列问题逐渐浮出水面。今天我们就先来了解一下数据出境是什么意思&#xff1f;我国数据出境合规要…