黑马程序员---SpringBoot快速入门

一、入门案例

        ①创建Maven项目

        ②导入SpringBoot起步依赖

        ③定义Controller

        ④编写引导类

        ⑤启动测试

pom.xml


    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.5
    


    
        
            org.springframework.boot
            spring-boot-starter-web
        
    

HelloController.java

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello Spring-Boot";
    }

}

HelloApplication.java

/*
* 引导类:SpringBoot项目的入口
* */
@SpringBootApplication
public class HelloApplication {

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

}

小结:

        SpringBoot在创建项目时,使用jar的打包方式

        SpringBoot的引导类,是项目入口,运行main方法就可以启动项目

        使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样

使用idea快速构建SpringBoot工程,定义HelloController.hello()方法,返回“Hello SpringBoot!”;

二、SpringBoot起步依赖原理分析

        定义了各种技术的版本信息,组合了一套最优搭配的技术版本

        在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程

        我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题

        

三、SpringBoot配置

3.1 配置文件分类

        SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置

对于properties:

        server.port=8080

对于yml:

server:port: 8080

小结:

        在同一级目录下优先级为:properties>yml>yaml

        默认配置文件名称:application

3.2 YAML

YAML 是一种直观的能够被电脑识别的数据序列化格式

YAML文件扩展名可以使用.yml 或者 .yaml

3.2.1 基本语法

大小写敏感

数据之前便必须有空格,作为分隔符

使用缩进表示层级关系

缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数据可能不同,导致层次混乱)

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

#表示注释,从这个字符一直到行尾,都会被解析器忽略

3.2.2 数据格式

①对象(map):键值对的集合

person:

    name:  zhangsan

#行内写法

person:  {name:  zhangsan}

②数组:一组按次序排列的值

address:

  - beijing

  - shanghai

#行内写法

address:  [beijing,shanghai]

③纯量:单个的、不可再分的值

msg1: 'hello \n world'        #单引忽略转义字符

msg2: "hello \n world"        #双引识别转义字符

④参数引用

name: lisi

person:

  name:  ${name}  #引用上边定义的name值

name: abc
#对象的格式
person:
  name: ${name}
  age: 20

#对象行内写法
person2: {name: lisi,age: 20}

#数组
address:
  - beijing
  - shanghai

#纯量
msg1: 'hello \n world'
msg2: "hello \n world"

3.3 读取配置文件的内容

1)@Value

2)Enviroment

3)@ConfigurationProperties

3.3.1 @Value

每个属性单个获取

 @Value("${name}")
    private String name;

    @Value("${person.name}")
    private String name2;

    @Value("${person.age}")
    private int age;

    @Value("${address[0]}")
    private String address1;

    @Value("${address[1]}")
    private String address2;

    @Value("${msg1}")
    private String msg1;

    @Value("${msg2}")
    private String msg2;

    @RequestMapping("/hello2")
    public String hello2(){
        System.out.println(name);
        System.out.println(name2);
        System.out.println(age);
        System.out.println(address1);
        System.out.println(address2);
        System.out.println(msg1);
        System.out.println(msg2);
        return name;
    }

黑马程序员---SpringBoot快速入门_第1张图片

3.3.2 Environment

注入环境Environment对象,通过该对象对getProperty方法获取属性值


    @Autowired
    private Environment env;

    @RequestMapping("/hello3")
    public String hello3(){
        System.out.println(env.getProperty("person.name"));
        System.out.println(env.getProperty("address[0]"));
        return name;
    }

3.3.3 @ConfigurationProperties

对象和配置属性的绑定

Person.java

@Component
@ConfigurationProperties(prefix="person")
public class Person {
    private String 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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

HelloController.java

    @Autowired
    private Person person;

    @RequestMapping("/hello3")
    public String hello3(){
        System.out.println("~~~~~~~~~~~~~");
        System.out.println(person);
        System.out.println("~~~~~~~~~~~~~");
        return name;
    }

黑马程序员---SpringBoot快速入门_第2张图片

把数组加入到Person对象:

        修改yml文件

person:
  name: ${name}
  age: 20
  address:
   - beijing
   - shanghai

黑马程序员---SpringBoot快速入门_第3张图片

对于这个爆红:

 添加依赖到pom.xml即可:

         
            org.springframework.boot
            spring-boot-configuration-processor
            true
        

3.4 profile

我们在开发SpringBoot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常复杂。profile功能就是来进行动态配置切换的。

3.4.1 profile配置方式

properties文件

dev是后缀

黑马程序员---SpringBoot快速入门_第4张图片

 动态激活代码:

spring.profiles.active=dev

黑马程序员---SpringBoot快速入门_第5张图片

yml多文件配置

---
server:
  port: 8081

spring:
  profiles:
    active: dev

---
server:
  port: 8083

spring:
  profiles:
   active: test
---
server:
  port: 8084

spring:
  profiles:
    active: pro

---
spring:
  config:
    activate:
      on-profile:
      - pro

3.5 内部配置加载顺序

 Springboot程序启动时,会从以下位置加载配置文件:

        1. file:../config/:当前项目下的/config目录下

        2.file:../        :当前项目的根目录

        3.classpath:/config/:classpath的/config目录

        4.classpath:/        :classpath的根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效

file是整个工程的文件:

黑马程序员---SpringBoot快速入门_第6张图片

classpath 是模块下的类路径

黑马程序员---SpringBoot快速入门_第7张图片

四、SpringBoot整合其他框架

4.1 SpringBoot整合junit

①搭建SpringBoot工程

②引入starter-test起步依赖

③编写测试类

④添加测试相关注解

        @RunWith(SpringRunner.class)        //新版无需再写

        @SpringBootTest(classes = 启动类.class)

                注:如果不想写启动类,就将测试类放在启动类的目录或子目录下

⑤编写测试方法

UserService.java

@Service
public class UserService {

    public void add(){
        System.out.println("add~~~");
    }

}

UserServiceTest.java


@SpringBootTest
public class UserServiceTest {

    @Autowired
    UserService userService;

    @Test
    public void testAdd(){
        userService.add();
    }

}

4.2 SpringBoot整合Redis

①搭建SpringBoot工程

②引入redis起步依赖

③配置redis相关属性

④注入 RedisTemplate模板

⑤编写测试方法,测试

勾选NoSQL的第一个选项卡

黑马程序员---SpringBoot快速入门_第8张图片

会自动导入依赖:

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

只有本机的Redis才不需要配置,直接使用模板

@SpringBootTest
class Demo1ApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;


    @Test
    public void testSet(){
        redisTemplate.boundValueOps("name").set('zhangsan');
    }

    @Autowired
    public void testGet(){
        Object name = redisTemplate.boundValueOps("name").get();
        System.out.println(name);
    }
}

4.3 SpringBoot整合MyBatis

①搭建SpringBoot工程

②引入mybatis起步依赖,添加mysql驱动

③编写DataSource和MyBatis相关配置

④定义表和实体类

⑤编写dao和mapper文件/纯注解开发

⑥测试

勾选SQL的两个选项卡

黑马程序员---SpringBoot快速入门_第9张图片

此时,会自动添加依赖:

         
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
        

        
            com.mysql
            mysql-connector-j
            runtime
        

建库建表

create database db_springboot;

use db_springboot;

create table tb_user(
    id int(11) not null auto_increment,
    username varchar(32),
    password varchar(32),
    primary key(id)
);

创建实体类:

public class User {
    private int id;
    private String username;
    private String password;
……
}

配置application.yml

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

4.3.1 注解开发

UserMapper.java

@Mapper
@Repository
public interface UserMapper {
    @Select("select * from tb_user")
    public List findAll();
}

测试类:

   @Autowired
    private UserMapper userMapper;

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

4.3.2 xml开发

UserXmlMapper.java

@Mapper
public interface UserXmlMapper {
    public List findAll();
}

UserXmlMapper.xml




    
    

application.yml

spring:
  datasource:
    url: jdbc:mysql:///db_springboot?serverTimmezone=UTC
    username: root
    password: 0529Love
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  type-aliases-package: com.example.demomybatis.domain
  mapper-locations: classpath:mapper/*Mapper.xml

测试类

@Autowired
    private UserXmlMapper userXmlMapper;

    @Test
    public void testFindAll2(){
        List list = userXmlMapper.findAll();
        System.out.println(list);
    }

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)