SpringBoot笔记——6小时快速入门(持续更新)

要学习SpringCloud啦!但是SpringBoot是基础,所以需要开个篇补一下,这里学习的是黑马程序员的6小时快速入门SpringBoot,在这里记录一下,以防忘记,将来也方便复习!

目录

  • day01 SpringBoot初级
    • SpringBoot概述
    • SpringBoot快速入门
    • SpringBoot起步依赖原理分析
    • springboot 配置
      • 配置文件分类
      • YAML
        • yaml的语法:
        • YAML数据格式
      • 读取配置文件信息
        • @Value
        • Environment:
        • configrationPeoperties
      • profiles
        • profile配置方式
          • 多profile方式:
          • yml多文件方式:
        • profile激活方式
          • 配置文件
          • 虚拟机参数
          • 命令行参数
      • 内部配置加载顺序
      • 外部配置加载顺序
    • SpringBoot整合其他框架
      • 整合[Junit](https://zhuanlan.zhihu.com/p/86624354)
      • 整合Redis
      • 整合MyBatis
  • day02 SpringBoot高级

day01 SpringBoot初级

SpringBoot笔记——6小时快速入门(持续更新)_第1张图片

SpringBoot概述

SpringBoot笔记——6小时快速入门(持续更新)_第2张图片
突发奇想:学习编程,一定要自顶向下学习,刚刚入门了SC,对整个开发部署流程有了一个大概的认知,在听SB的课程发现理解起来很容易,而且学习的目标性很强
为什么会有SB呢?
这就要聊一聊Spring的缺点了
SpringBoot笔记——6小时快速入门(持续更新)_第3张图片
SpringBoot笔记——6小时快速入门(持续更新)_第4张图片
使用SB就不用配置tomcat了,因为将其内置了

SpringBoot快速入门

SpringBoot笔记——6小时快速入门(持续更新)_第5张图片
创建maven项目:

SpringBoot笔记——6小时快速入门(持续更新)_第6张图片
在这遇到个小问题,我的module点了没反应,解决方法就是将插件koitlin禁用
选用maven的模块
SpringBoot笔记——6小时快速入门(持续更新)_第7张图片

SpringBoot笔记——6小时快速入门(持续更新)_第8张图片

接下来在pom.xml文件中导入起步依赖

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.3.9.RELEASEversion>
    <relativePath/>
parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
dependencies>

然后定义controller
SpringBoot笔记——6小时快速入门(持续更新)_第9张图片

package com.itheima;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("Hello")
    public String hello(){
        return "Hello Spring Boot!";
    }
}

接下来如何启动呢,那接下来就是springboot特有的引导类,引导类一般都是Application结尾的,这个相当于springboot的入口。

有个细节就是要把业务代码和这个引导类分开写,如

SpringBoot笔记——6小时快速入门(持续更新)_第10张图片
HelloApplication.java中的代码:(将main方法写在此类中)

package com.itheima;

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

/**
 * 此类为引导类,也就是SB项目的入口,在入口中写入main方法
 */
@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class,args);
    }
}

最后在这运行项目,然后输入url,页面成功显示
SpringBoot笔记——6小时快速入门(持续更新)_第11张图片

SpringBoot笔记——6小时快速入门(持续更新)_第12张图片

SpringBoot笔记——6小时快速入门(持续更新)_第13张图片

但是啊,这又要写pom.xml文件,又要写引导类耗费时间,那么有没有一种更快的构建方式呢?
当然

SpringBoot笔记——6小时快速入门(持续更新)_第14张图片
SpringBoot笔记——6小时快速入门(持续更新)_第15张图片
接下来我们只需要直接写业务代码就ok
可以说是更加便捷了

SpringBoot起步依赖原理分析

SpringBoot笔记——6小时快速入门(持续更新)_第16张图片
在pom.xml文件中我们可以追溯到spring-boot-starter-parent的祖先类spring-boot-dependencies,这个类中的properties标签整合了各种常用技术的稳定版本,如图:
SpringBoot笔记——6小时快速入门(持续更新)_第17张图片
再往下有一个标签是dependencyManagement,这是版本锁定的意思,如果我们在父工程中定义了版本信息,将来我们的工程如果继承了父工程,那我们就不需要写版本信息,如果没有继承,那就得加上父工程的版本信息。

SpringBoot笔记——6小时快速入门(持续更新)_第18张图片

springboot 配置

分为一下几个部分:

SpringBoot笔记——6小时快速入门(持续更新)_第19张图片
简单介绍一下profile的功能就是,或者说为什么会有profile,因为我们在开发的时候使用的是开发环境,部署的时候使用的是生产环境,而测试的时候使用的是测试环境,但是三种环境使用的配置是不一样的,所有就需要动态切换这些配置,因此也就有了profile。

配置文件分类

SpringBoot笔记——6小时快速入门(持续更新)_第20张图片
其中.yml.yaml都指同一种文件类型,由此我们便知道了,后缀名为properties、yml和yaml的文件都是配置文件
SpringBoot笔记——6小时快速入门(持续更新)_第21张图片
如果同一个项目,既有.properties和.yml,则idea会优先配置properties文件的内容,如果yaml和yml并存会优先执行yml。
SpringBoot笔记——6小时快速入门(持续更新)_第22张图片

YAML

SpringBoot笔记——6小时快速入门(持续更新)_第23张图片
使用properties,它的格式是没有缩进的,但是yml有
SpringBoot笔记——6小时快速入门(持续更新)_第24张图片

yaml的语法:

SpringBoot笔记——6小时快速入门(持续更新)_第25张图片

YAML数据格式

SpringBoot笔记——6小时快速入门(持续更新)_第26张图片
单引忽略,双引识别

server:
  port: 8082

name: abc

#对象
person:
  name: zhangsan
  age: 13
#对象行内写法
person1: {name: lisi,age: 14}

#地址
address:
  - beijing
  - shanghai

#地址行内写法
address1: [beijing,shanghai]

msg1: 'hello \n world'
msg2: "hello \n world"

SpringBoot笔记——6小时快速入门(持续更新)_第27张图片
SpringBoot笔记——6小时快速入门(持续更新)_第28张图片

读取配置文件信息

SpringBoot笔记——6小时快速入门(持续更新)_第29张图片

SpringBoot笔记——6小时快速入门(持续更新)_第30张图片

@Value


    @Value("${name}")			//使用@Value来读取值
    private String name1;		
    
    @Value("${person.name}")		//使用@Value来读取对象
	private String name2;	
	
     @Value("${address[0]}")           //使用@Value来读取数组
     private String address1;	

Environment:

定义一个Environment对象,这个对象属于
SpringBoot笔记——6小时快速入门(持续更新)_第31张图片
要对这个对象进行@Autowire注解,并且调用这个对象的getProperty()方法来获取配置内容,这个方法括号内要加双引号

    @Autowired
    private Environment env;
    
    @RequestMapping("/hello")
    public String hello(){
        System.out.println(env.getProperty("person.age"));
        return "SB 222!";

value注解适用于少数的配置内容获取,获取一两个配置可以用value,但是要获取大量的配置内容建议用Environment对象,只需要写一个@Autowire注解就可以使用方法多次调用,这样看起来美观一点。

configrationPeoperties

我们要在新建的Person类中获取配置文件中的Person对象的name和age
SpringBoot笔记——6小时快速入门(持续更新)_第32张图片
现在Person类中写入相对应的get set 方法

@Component                                     //此注解表示这个Person类被Spring所识别,它是一个bean
@ConfigurationProperties(prefix = "person")  //表示要在配置文件中找有没有一个person的对象name和age,在这里prefix的作用是先预先锁定
public class Person {
    private String name;    //这里的name一定要与配置文件中的相同,下同
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Persion{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在congtroll中注入Person类,用@Autowire注解,相当于创建了一个person对象

    @Autowired
    private Person person;

SpringBoot笔记——6小时快速入门(持续更新)_第33张图片
输出结果:成功!
SpringBoot笔记——6小时快速入门(持续更新)_第34张图片
小结:使用environment和configrationProperties时,都需要在controller中采用@Autowire注解

接下来是获取配置中的数组并打印:
SpringBoot笔记——6小时快速入门(持续更新)_第35张图片

SpringBoot笔记——6小时快速入门(持续更新)_第36张图片
SpringBoot笔记——6小时快速入门(持续更新)_第37张图片

profiles

SpringBoot笔记——6小时快速入门(持续更新)_第38张图片

SpringBoot笔记——6小时快速入门(持续更新)_第39张图片
dev:开发环境,pro:生产环境

profile配置方式

多profile方式:

SpringBoot笔记——6小时快速入门(持续更新)_第40张图片

yml多文件方式:

创建一个application.yml文件,在yml中

SpringBoot笔记——6小时快速入门(持续更新)_第41张图片

profile激活方式

配置文件

在application.properties中输入

spring.profiles.active=dev

表示激活application-dev.properties中的配置。

虚拟机参数

SpringBoot笔记——6小时快速入门(持续更新)_第42张图片
SpringBoot笔记——6小时快速入门(持续更新)_第43张图片SpringBoot笔记——6小时快速入门(持续更新)_第44张图片
参数为-Dspring.profiles.active=test
这样配置,运行时就会提示说端口号为test的端口号

命令行参数

SpringBoot笔记——6小时快速入门(持续更新)_第45张图片
命令:--spring.profiles.active=pro
同时,我们可以将我们的项目打包,然后在命令行运行jar包,同时激活环境
在jar包目录下运行:
java -jar .\springboot-profiles-0.0.1-SNAPSHOT.jar便可启动服务
SpringBoot笔记——6小时快速入门(持续更新)_第46张图片
同时可以用--spring.profiles.active=dev指定环境

完整命令:java -jar .\springboot-profiles-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
SpringBoot笔记——6小时快速入门(持续更新)_第47张图片
使用虚拟机参数和命令行参数就可以不用动我们的代码,进行切换啦

SpringBoot笔记——6小时快速入门(持续更新)_第48张图片

内部配置加载顺序

SpringBoot笔记——6小时快速入门(持续更新)_第49张图片

有config就找conifg,
记一下在这遇到的问题,还没解决,就是在properties中配置了服务器端口号为8081,但是跑起来的端口号竟然是8084
厚礼谢,这个问题,我在看完视频之后解决了
因为我的代码是粘贴的黑马的,他在当前大项目springboot下的config中新建了properties文件,在其中配置了端口号为8084,而我是在小项目springboot-config里面的properties文件中配置的端口号8081,
SpringBoot笔记——6小时快速入门(持续更新)_第50张图片
SpringBoot笔记——6小时快速入门(持续更新)_第51张图片SpringBoot笔记——6小时快速入门(持续更新)_第52张图片
结合内部配置加载顺序的那张图,我瞬间明白!!我心里暗喜,那接下来已运行端口号应该是8081了吧,结果竟然是8083 ???
我发现还有个properties在当前目录下,里面的port正是8083,结合内部配置加载顺序的那张图,我又一次大惊,并暗喜,搜嘎!
SpringBoot笔记——6小时快速入门(持续更新)_第53张图片
最后我将其他的properties文件都注释掉,只留了小项目的8081,一运行,ok,问题解决!
SpringBoot笔记——6小时快速入门(持续更新)_第54张图片
加载有顺序,所以小项目里的配置最终也会被执行,配置上下文路径,加一个hello
SpringBoot笔记——6小时快速入门(持续更新)_第55张图片
再写一个controller,接下来访问就需要hello/hello了
SpringBoot笔记——6小时快速入门(持续更新)_第56张图片
SpringBoot笔记——6小时快速入门(持续更新)_第57张图片

外部配置加载顺序

SpringBoot笔记——6小时快速入门(持续更新)_第58张图片
SpringBoot笔记——6小时快速入门(持续更新)_第59张图片
上图为官方网站17个外部配置的优先顺序,其中命令行排在第四,一般用命令行来配置
下面是命令行配置端口我上下文路径的命令:

java -jar .\springboot-config-0.0.1-SNAPSHOT.jar --server.port=8082		

java -jar .\springboot-config-0.0.1-SNAPSHOT.jar --server.port=8082 s--server.servlet.context-path=/hehe

在外部还有一种方式是通过命令行执行配置文件,需要输入配置文件的地址
SpringBoot笔记——6小时快速入门(持续更新)_第60张图片

java -jar .\springboot-config-0.0.1-SNAPSHOT.jar --spring.config.location=e://application.properties

小结:
所以SpringBoot提供这种多位置可以配置文件的方式,形成了多文件的一种互补方式
配置信息可以写在配置文件中(内部),也可以在运行时写入命令行中(外部)

SpringBoot整合其他框架

整合Junit

SpringBoot笔记——6小时快速入门(持续更新)_第61张图片

测试类,要测什么类,类名就是什么
准备测试UserService类

SpringBoot笔记——6小时快速入门(持续更新)_第62张图片
SpringBoot笔记——6小时快速入门(持续更新)_第63张图片
打印输出add

SpringBoot笔记——6小时快速入门(持续更新)_第64张图片

如果test的包名和java的包名一致,或者test的包是java包的子包,则可以不用指定@SpringBootTest中的classes,但是如果test和java的包名不一致且不是子包,则需要指定@SpringBootTest中的classes,如果不指定就会报错。
例如:
SpringBoot笔记——6小时快速入门(持续更新)_第65张图片
而如果是运行下图中两个方框的类,则不需要指定classes,因为1是与java包名一致的,而2是Java包的子包
在这里插入图片描述

整合Redis

SpringBoot笔记——6小时快速入门(持续更新)_第66张图片
redis需要的依赖是NoSQL

SpringBoot笔记——6小时快速入门(持续更新)_第67张图片

SpringBoot笔记——6小时快速入门(持续更新)_第68张图片
运行之前要配置application.yml文件,还要打开redis服务器

spring:
  redis:
    host: 127.0.0.1    # redis的主机ip
    port: 6379

整合MyBatis

SpringBoot笔记——6小时快速入门(持续更新)_第69张图片
SpringBoot笔记——6小时快速入门(持续更新)_第70张图片

在yml文件中配置DataSource
DataSourse:用户名,密码,连接地址等等
SpringBoot笔记——6小时快速入门(持续更新)_第71张图片

SpringBoot笔记——6小时快速入门(持续更新)_第72张图片

在测试中注入对应的mapper接口类 ,并写入测试


    @Autowired
    private UserMapper userMapper;

    @Test
    public void testFindAll() {
        List<User> list = userMapper.findAll();
        System.out.println(list);

在运行过程中发现个问题:The server time zone value '�й���׼ʱ��' is unrecognized,解决方案为在yml文件中设置时区

# datasource
spring:
  datasource:
    url: jdbc:mysql:///springboot?serverTimezone=UTC	#其中///省略了对应的ip和端口,因为连接的是本地的mysql,设置时区
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

day02 SpringBoot高级

你可能感兴趣的:(Java,网页制作,Springboot,spring,boot,java,spring)