SpringBoot学习笔记(二)

一、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工程, 引入相关依赖

2 定义消费端业务接口OrderService & POJO 【copy】

3 定义消费端OrderController

4 配置application.yml整合dubbo

5 创建启动类并启动服务

(五)启动浏览器进行测试

相关推荐
Q_19284999063 小时前
基于Spring Boot的找律师系统
java·spring boot·后端
PP东4 小时前
ES6学习Generator 函数(生成器)(八)
javascript·学习·es6
小屁不止是运维6 小时前
麒麟操作系统服务架构保姆级教程(二)ssh远程连接
linux·运维·服务器·学习·架构·ssh
毕设资源大全7 小时前
基于SpringBoot+html+vue实现的林业产品推荐系统【源码+文档+数据库文件+包部署成功+答疑解惑问到会为止】
java·数据库·vue.js·spring boot·后端·mysql·html
follycat7 小时前
bestphp‘s revenge
学习·web安全
柳鲲鹏7 小时前
jiangdg/AndroidCamera关闭摄像头流程
笔记
职业考试资料墙7 小时前
二级建造师考试题库及答案
学习·考试·题库
warrah8 小时前
k8s迁移——岁月云实战笔记
笔记·容器·kubernetes
Aughts9 小时前
基础电路的学习
学习
岳不谢10 小时前
华为DHCP高级配置学习笔记
网络·笔记·网络协议·学习·华为