一、SpringBoot整合Junit
(一)junit5 介绍
Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform:
Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter:
JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage
由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。
(二)SpringBoot整合Junit
1 构建工程添加依赖
在使用initializr自动创建SpringBoot工程时就已经自动配置了test依赖
            
            
              XML
              
              
            
          
          <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>
        2 创建测试类
测试类也在使用initializr自动创建SpringBoot工程时自动配置

3 测试类注入测试对象
            
            
              java
              
              
            
          
          @Test
    void contextLoads() {
        System.out.println("hello");
    }
        4 测试结果

3 SpringBoot整合Mybatis
(一)SpringBoot整合Mybatis框架
1 创建maven工程添加依赖
            
            
              XML
              
              
            
          
              <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>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
    </dependencies>
        2 建数据库数据库表

3 创建数据模型
此处省略了seth和get方法以及toString方法
            
            
              java
              
              
            
          
              private   Integer id;
    private   String name;
    private   Integer age;
    private   String gender;
    private Date birthday;
        4 创建接口和mapper配置文件
            
            
              java
              
              
            
          
          @Mapper
public interface UserMapper {
    User findUserById(Integer id);
}
        
            
            
              XML
              
              
            
          
          <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jn.springbootproject07.mapper.UserMapper">
    <select id="findUserById" resultType="com.jn.springbootproject07.entity.User">
        select * from users where id = #{id}
    </select>
</mapper>
        5 配置application.yml(数据源,Myatis配置)
            
            
              XML
              
              
            
          
          #配置数据源 四大参数
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatisdatabase100
    username: root
    password: 123456
mybatis:
  mapper-locations: classpath:/mapper/*Mapper.xml #配置mapper接口的位置
  #config-location: 配置了mybatis的核心配置文件
  type-aliases-package: com.jn.springbootproject07.entity
        6 创建业务层接口和实现类
            
            
              java
              
              
            
          
          package com.jn.springbootproject07.service;
import com.jn.springbootproject07.entity.User;
public interface UserService {
    User findUserById(Integer id);
}
        
            
            
              java
              
              
            
          
          @Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User findUserById(Integer id) {
        System.out.println("UserServiceImpl.findUserById()");
        return userMapper.findUserById(id);
    }
}
        7 创建控制器controller
            
            
              java
              
              
            
          
          @RestController
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("findById")
    public User findById(Integer id){
        return userService.findUserById(id);
    }
}
        8 启动服务测试结果
访问地址: http://localhost:8080/account/findById?id=3
测试结果:

4 SpringBoot整合Redis
spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的"RedisTemplate"类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
(一)创建SpringBoot程序引入启动器
或者是pom.xml文件当中引入启动器依赖
            
            
              XML
              
              
            
          
          <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
        (二)application.yml配置连接信息
            
            
              java
              
              
            
          
          spring:
  data:
    redis:
      host: 192.168.187.128
      port: 6379
      password: 123456
        (三)使用RedisTemplate操作Redis
1 值类型操作
            
            
              java
              
              
            
          
          @SpringBootTest
class SpringBootProject08ApplicationTests {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    //测试redis的值类型
    @Test
    void testString(){
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        ops.set("name","维克托");
        String name = ops.get("name");
        System.out.println(name);
    }
}
        2 Set类型操作
            
            
              java
              
              
            
          
              //测试redis的set类型
    @Test
    void testSet(){
        SetOperations<String, String> ops = redisTemplate.opsForSet();
        //添加
        ops.add("names","huahua","huangrongqi","wangyang","tietou");
        //获取
        Set<String> names = ops.members("names");
        System.out.println(names);
        //移除单个
        ops.remove("names","huahua");
        //删除key
        //redisTemplate.delete("names");
    }
        3 List集合操作
3.1 右压栈
            
            
              java
              
              
            
          
              //测试redis的list类型------右压栈
    @Test
    void testList(){
        ListOperations<String, String> ops = redisTemplate.opsForList();
        ops.rightPush("mylist","a");
        ops.rightPush("mylist","b");
        ops.rightPush("mylist","c");
        //获取
        List<String> mylist = ops.range("mylist", 0, -1);
        System.out.println(mylist);
    }
        3.2 左压栈
            
            
              java
              
              
            
          
              //测试redis的list类型------左压栈
    @Test
    void testListLeft(){
        ListOperations<String, String> ops = redisTemplate.opsForList();
        ops.leftPush("mylist","Abandon");
        ops.leftPush("mylist","Butterfly");
        ops.leftPush("mylist","Cow");
        //获取
        List<String> mylist = ops.range("mylist", 0, -1);
        System.out.println(mylist);
    }
        3.3 根据索引查询元素
            
            
              java
              
              
            
          
              //根据索引查询元素
    @Test
    void testListIndex(){
        ListOperations<String, String> ops = redisTemplate.opsForList();
        String index = ops.index("mylist", 2);
        System.out.println(index);
    }
        3.4 移除某个元素的值
            
            
              java
              
              
            
          
              //根据索引删除元素
    @Test
    void testListDelete(){
        ListOperations<String, String> ops = redisTemplate.opsForList();
        ops.remove("mylist",1,"Cow");
        List<String> mylist = ops.range("mylist", 0, -1);
        System.out.println(mylist);
    }
        4 Hash类型操作
4.1 存入值
            
            
              java
              
              
            
          
              //测试redis的hash类型------存入键值对
    @Test
    void testHash(){
        HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();
        ops.put("user","name","王阳");
        ops.put("user","age","18");
        ops.put("user","sex","女");
    }
        4.2 提取所有的KEY
            
            
              java
              
              
            
          
              //测试redis的hash类型------获取hash的所有键值对
    @Test
    void testHashGet(){
        HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();
        //获取hash的所有键值对
        Map<Object, Object> user = ops.entries("user");
        System.out.println(user);
    }
        4.3 提取所有的值
            
            
              java
              
              
            
          
              //测试redis的hash类型------获取hash的所有键值对
    @Test
    void testHashGet(){
        HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();
        //获取hash的所有键值对
        Map<Object, Object> user = ops.entries("user");
        System.out.println(user);
    }
        4.4 根据KEY提取值
            
            
              java
              
              
            
          
              //测试redis的hash类型------获取hash的某个键的值
    @Test
    void testHashGetKey(){
        HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();
        Object age = ops.get("user", "age");
        System.out.println(age);
    }
        4.5根据KEY移除值
            
            
              java
              
              
            
          
              //测试redis的hash类型------删除hash的某个键
    @Test
    void testHashDelete(){
        HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();
        ops.delete("user","age");
    }
        (四)SpringBoot整合Redis序列化操作
1 Spring提供的序列化器介绍
1.1 Spring默认序列化器
RedisTemplate操作时,默认会采用jdkSerializable序列化机制,使得插入的值在redis客户端看来会有乱码,若想解决这一问题,需要手动指定序列化方式。

1.2 常见的序列化器

2 序列化案例实现
2.1 创建实体实现序列化接口
            
            
              java
              
              
            
          
          public class User implements Serializable {
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
        2.2 在配置类中设置序列化器
            
            
              java
              
              
            
          
          @Configuration
public class RedisConfig {
    /*
    指定自己的RedisTemplate对象,模板对象设定给了序列化器
    返回值装在了IOC容器里面
     */
    @Bean
    public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String,User> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        //设置序列化器
        Jackson2JsonRedisSerializer Serializer = new Jackson2JsonRedisSerializer(User.class);
        //设置默认的键值对序列化器
        template.setDefaultSerializer(Serializer);
        return template;
    }
}
        2.3 测试类对象序列化
            
            
              java
              
              
            
          
          @SpringBootTest
public class TestSerilazerTemplate {
    @Autowired
    private RedisTemplate<String, User> redisTemplate;
    @Test
    public void test()
    {
        User user = new User(1, "王阳");
        redisTemplate.opsForValue().set("user", user);
        User user1 = redisTemplate.opsForValue().get("user");
        System.out.println("序列化成功"+user1);
    }
}
        
5 SpringBoot整合Dubbo
(一)启动zookeeper注册中心服务
(二)构建maven工程添加依赖
(三)创建服务提供者
1 定义服务接口OrderSerice
2 定义接口OrderSerice实现类并暴露服务
3 配置application.properties整合dubbo
4 创建启动类并启动服务
(四)创建服务器消费者
1 环境准备
创建boot工程, 引入相关依赖