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