浅谈SpringBoot的基本概念与简单的使用与yml文件的基本使用, 整合Redis,整合MyBatis

SpringBoot

什么是SpringBoot

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。2014 年 4 月,Spring Boot 1.0.0 发布。Spring的顶级项目之一(https://spring.io)。

SpringBoot 功能

1) 自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
2) 起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
3) 辅助功能
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

简单来说:Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

SpringBoot的简单入门(代码详细解释,yml格式文件书写方法)

SpringBoot在创建项目时,使用jar的打包方式。
SpringBoot的引导类,是项目入口,运行main方法就可以启动项目。
使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样。

构建maven项目

pom.xml

主要引入springboot父项目

    <!--    导入springboot父工程spring-boot-starter-parent,
    我们自己的的helloworld就成为springboot的子工程会自动引入父工程的依耐-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

主启动

package com.fs;

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

/*
引导类,springBoot项目的入口
放在项目的根目录就会自动@ComponentScan(启动类已经启动类下的包)
 */
@SpringBootApplication
public class HelloWorld {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorld.class,args);
    }
}

springboot的配置

推荐使用yml

YAML

YAML全称是 YAML Ain’t Markup Language 。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅
读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP
等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml。
在这里插入图片描述

YAML:基本语法

⚫ 大小写敏感
⚫ 数据值前边必须有空格,作为分隔符
⚫ 使用缩进表示层级关系
⚫ 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
⚫ 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
⚫ # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

YAML:数据格式

在这里插入图片描述
在这里插入图片描述

YAML:小结

1) 配置文件类型
⚫ properties:和以前一样
⚫ yml/yaml:注意空格
2) yaml:简洁,以数据为核心
⚫ 基本语法
• 大小写敏感
• 数据值前边必须有空格,作为分隔符
• 使用空格缩进表示层级关系,相同缩进表示同一级
⚫ 数据格式
• 对象
• 数组: 使用 “- ”表示数组每个元素
• 纯量
⚫ 参数引用
• ${key}

读取配置文件内容
  • @Value
  • Environment:程序启动时配置的环境变量,使用此方式获取
  • @ConfigurationProperties(prefix = “person”) 把一组属性注入到一个对象中
代码实现

application.yml

# springboot的配置文件 springboot项目启动的时候会自动加载classes目录下的application.yml或者properties文件
# yml 简洁,以数据为核心
# 一个工程支持多个配置文件,包括properties和yml和yaml
# 当属性冲突时  会按照properties>yml>yaml 的优先级生效
# 配置tomcat的端口 不配置springboot默认配置8080
server:
  port: 80805
# 给项目起一个名称
spring:
  application:
    name: HelloWorld
  # 配置多环境配置方式1:多文件方式  (在resources下创建yml配置文件,也可以是properties,开发,测试,生产等)
  # 文件名字必须为application-环境名.yml/properties
  # 只要主配置文件中写了profiles.active: 环境名 springboot就会根据环境名去classes目录找application-环境名.yml的文件
  profiles:
    active: dev

# 配置多环境方式2:yml文档方式(了解,不建议使用)  也可以下面这样使用--- 分割文件设置多环境
#---
#server:
#  port: 8081
#spring:
#  profiles: dev # 开发环境
#---
#server:
#  port: 8082
#spring:
#  profiles: test # 测试环境
#---
#server:
#  port: 8083
#spring:
#  profiles: pro # 生产环境
#---



# yml的数据格式  定义后可以通过java代码来获取
# 定义一个参数
sex:# 对象(map) 键值对的集合
person:
  name: xiaofu
  age: 18
  sex: ${sex} # 参数引用(引用的参数一定要提前定义)
# 对象的行内写法(一般不会使用,了解即可)
person2: {name: xiaohua,age: 18}

# 数组 按次排序列
address:
  - 重庆
  - 开县
#数组的行内写法(一般不会使用,了解即可)
address2: [重庆,开县]

# 纯量: 单个的
name: 'HelloWorld \n xiaofu' #单引号不会识别转义字符,会原样输出
name2: "HelloWorld \n xiaofu" # 双引号会识别转义字符

使用@ConfigurationProperties 方式注意事项

@Component
//读取配置文件中一组属性,存放在我们的person对象中
@ConfigurationProperties(prefix = "person")//注入yml配置文件配置的对象.需要指定前缀
public class Person {
    private String name;
    private Integer age;
    private String sex;
get set方法
}
测试类代码

需要在pom文件整合junit

④ 添加测试相关注解
• @RunWith(SpringRunner.class)
• @SpringBootTest(classes = 启动类.class)

package com.fs;

import com.fs.pojo.Person;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.Environment;
import org.springframework.test.context.junit4.SpringRunner;

/*
编写测试类
添加测试相关注解
• @RunWith(SpringRunner.class)
• @SpringBootTest(classes = 启动类.class)
编写测试方法
 */
//指定测试运行容器
@RunWith(SpringRunner.class)
//@SpringBootTest//若这个测试类的包与启动类的包是一样的,那么就可以省略classes = HelloWorld.class
@SpringBootTest(classes = HelloWorld.class)//就会去加载主启动类的配置文件以及扫描的包
class HelloWorldTest {

    //测试读取yam文件的配置
    @Value("${name}")
    private String name;

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

    //使用sprinboot对象获取yml文件属性
    @Autowired
    private Environment environment;


    //使用@ConfigurationProperties注解在实体类上自动映射
    @Autowired
    private Person person;

    @Test
    void contextLoads() {
        System.out.println(name);//HelloWorld \n xiaofu
        System.out.println(personName);//xiaofu

        System.out.println("-----------------------------------------");
        //使用对象.getProperty方法获取
        System.out.println(environment.getProperty("person.sex"));//男
        System.out.println(environment.getProperty("address2[0]"));//重庆
        System.out.println(environment.getProperty("name2"));//这个会解析转义所以输出的HelloWorld  换行了的 xiaofu

        System.out.println("-------------------------");
        System.out.println(person);//Person{name='xiaofu', age=18, sex='男'}
    }


}

SpringBoot多环境属性配置profile

profile
我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务
器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。
1) profile是用来完成不同环境下,配置动态切换功能的。
2) profile配置方式
⚫ 多profile文件方式:提供多个配置文件,每个代表一种环境。
• application-dev.properties/yml 开发环境
• application-test.properties/yml 测试环境
• application-pro.properties/yml 生产环境
⚫ yml多文档方式:
• 在yml中使用 — 分隔不同配置
3) profile激活方式
⚫ 配置文件: 再配置文件中配置:spring.profiles.active=dev
⚫ 虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
⚫ 命令行参数:java –jar xxx.jar --spring.profiles.active=dev

内部配置加载顺序

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

  1. file:./config/:当前项目下的/config目录下
  2. file:./ :当前项目的根目录
    3.== classpath:/config/:classpath的/config目录==
  3. classpath:/ :classpath的根目录
    加载顺序为上文的排列顺序,高优先级配置的属性会生效

外部配置加载顺序
通过官网查看外部属性加载顺序:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

SpringBoot整合Redis

① 搭建SpringBoot工程
② 引入mybatis起步依赖,添加mysql驱动
③ 编写DataSource和MyBatis相关配置
④ 定义表和实体类
⑤ 编写dao和mapper文件/纯注解开发
⑥ 测试

pomxml

<?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>
    <!--    导入springboot父工程spring-boot-starter-parent,
    我们自己的的helloworld就成为springboot的子工程会自动引入父工程的依耐-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.com.fs</groupId>
    <artifactId>springboot-redis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!--        引入web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        引入redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
<!--        整合junit-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

application.yml

# 当不知道配置的参数时候,idea双击shift 输入***Properties 就可以看到有这些配置属性类
spring:
  redis:
    host: 47.112.174.148 # redis的主机名
    port: 6379 #redis端口号

主启动

package com.fs;

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

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

测试类

//注入redisTemplate 这是spring写的
//Key:value 使用原生JdkSerializationRedisSerializer的序列化,存入的字符串会乱码
@Autowired
private RedisTemplate redisTemplate;


//stringRedisTemplate这个是将对象快速的序列化到redis中
//Key:value都是字符串的序列化方式 这样序列化对象到redis中不会乱码
@Autowired
private StringRedisTemplate stringRedisTemplate;

stringRedisTemplate这个是将对象快速的序列化到redis中,Key:value都是字符串的序列化方式 这样序列化对象到redis中不会乱码

package com.fs;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootRedis.class)
public class SpringBootRedisTest {

    //注入redisTemplate 这是spring写的
    //Key:value 使用原生JdkSerializationRedisSerializer的序列化,存入的字符串会乱码
    @Autowired
    private RedisTemplate redisTemplate;

    //stringRedisTemplate这个是将对象快速的序列化到redis中
    //Key:value都是字符串的序列化方式 这样序列化对象到redis中不会乱码
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    //测试存入
    @Test
    public void testAddRedis(){
        //存入数据
//        redisTemplate.opsForValue().set("name","xiaofu");
        stringRedisTemplate.opsForValue().set("name","xiaofu");
    }

    //测试获取
    @Test
    public void testGetRedis(){
        System.out.println("----------------------------------------");
        //取出数据
//        System.out.println(redisTemplate.opsForValue().get("name"));
        System.out.println(stringRedisTemplate.opsForValue().get("name"));
    }
}

SpringBoot整合MyBatis

① 搭建SpringBoot工程
② 引入mybatis起步依赖,添加mysql驱动
③ 编写DataSource和MyBatis相关配置
④ 定义表和实体类
⑤ 编写dao和mapper文件/纯注解开发
⑥ 测试
在这里插入图片描述

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--    导入springboot父工程spring-boot-starter-parent,
    我们自己的的helloworld就成为springboot的子工程会自动引入父工程的依耐-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.com.fs</groupId>
    <artifactId>springboot-MyBatis</artifactId>
    <version>1.0-SNAPSHOT</version>



    <dependencies>
        <!--        引入web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        引入MyBatis-->
        <!--        MyBatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--        druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
<!--        整合junit-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

application.yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://47.112.174.148:3306/health
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource #自定义数据源

# 配置MyBatis文件路径
mybatis:
  mapper-locations: classpath:com/fs/dao/*Dao.xml # dao映射路径
  type-aliases-package: com.fs.pojo

主启动

package com.fs;

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

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

dao Mapper 接口

package com.fs.mapper;

import com.fs.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
/*
注解的方式
 */
@Mapper
public interface UserMapper {

    @Select("select * from t_user")
    public List<User> findAll();
}

package com.fs.mapper;

import com.fs.pojo.User;
import org.apache.ibatis.annotations.Mapper;

//xml方式
@Mapper
public interface UserDao {

    User findById(Integer id);
}

Mapper.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.fs.mapper.UserDao">

<!--    查询用户byid-->
    <select id="findById" resultType="com.fs.pojo.User" parameterType="integer">
        select * from `t_user` where id = #{id}
    </select>

</mapper>
pojo
public class User implements Serializable{
    private Integer id; // 主键
    private Date birthday; // 生日
    private String gender; // 性别
    private String username; // 用户名,唯一
    private String password; // 密码
    private String remark; // 备注
    private String station; // 状态
    private String telephone; // 联系电话

get set
}

测试类

package com.fs;

import com.fs.mapper.UserDao;
import com.fs.mapper.UserMapper;
import com.fs.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootMyBatis.class)
public class SpringBootMyBatisTest {

    //注入我们的注解方式
    @Autowired
    private UserMapper userMapper;

    //注入xml的
    @Autowired
    private UserDao userDao;

    @Test
    public void findAll() {
        List<User> all = userMapper.findAll();
        for (User user : all) {
            System.out.println(user);
        }
    }

    @Test
    public void findById() {
        User byId = userDao.findById(1);
        System.out.println(byId);
    }
}
测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值