整合第三方技术
不要单单学习指定技术与springboot整合的方式
学习目标的是整合整体的技术的思路
拿到任何一个第三方技术后我们在springboot中如何操作
这是真正我们应该学习的东西
以后能整合任意技术
整合JUnit
JUnit 是一个流行的开源测试框架,用于 Java 编程语言。它提供了一种简单的方式来编写和执行 Java 代码的单元测试。以下是 JUnit 的一些关键方面:
-
注解:JUnit 使用注解来标记方法作为测试方法。
@Test
注解用于标识应该由测试运行器执行的测试方法。 -
断言:JUnit 提供了一组断言方法,位于
org.junit.Assert
类(在 JUnit 4 中)或org.junit.jupiter.api.Assertions
类(从 JUnit 5 开始),用于验证测试的预期结果。这些断言方法包括assertEquals
、assertTrue
、assertFalse
、assertNull
、assertNotNull
等。 -
测试运行器:JUnit 提供了一个测试运行器,负责运行测试并报告它们的结果。JUnit 的默认测试运行器是
JUnitCore
,但根据所使用的 JUnit 版本,也可以使用其他测试运行器,如JUnit4
和JUnit5
。 -
测试套件:JUnit 允许将多个测试用例分组成一个测试套件,使用
@RunWith
注解(JUnit 4)或@Suite
注解(JUnit 5)。测试套件使您能够将多个测试一起作为单个测试运行。 -
参数化测试:JUnit 支持参数化测试,允许您使用不同的输入参数运行相同的测试。这个特性对于测试具有多组输入的方法特别有用。
-
测试夹具:JUnit 提供了注解,如
@Before
、@After
、@BeforeClass
和@AfterClass
,用于定义应在每个测试方法之前或之后执行的方法(@Before
、@After
)或在测试类中的所有测试方法之前或之后执行的方法(@BeforeClass
、@AfterClass
)。这些方法通常用于设置测试夹具(例如,初始化对象)和清理资源。 -
异常处理:JUnit 允许您使用
@Test
注解的expected
属性(JUnit 4)或assertThrows
方法(JUnit 5)来测试在测试方法执行过程中是否抛出了特定的异常。 -
扩展:JUnit 5 引入了一个新的扩展模型,允许开发人员通过注解和接口扩展 JUnit 的行为。扩展可以用于实现自定义测试执行逻辑、参数解析、生命周期回调等。
总的来说,JUnit 简化了在 Java 中编写和执行单元测试的过程,促进了测试驱动开发(TDD)实践,并确保了 Java 应用程序的可靠性和正确性。
创建一个新的项目
不添加任何依赖
这里我们发现依赖中少了web
因为我们没导maven的依赖
起步依赖是必须要的
默认导入的依赖是基于maven最基础的测试功能的
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bigdata1421</groupId>
<artifactId>springboot_JUnit</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_JUnit</name>
<description>springboot_JUnit</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.bigdata1421.springboot_junit.SpringbootJUnitApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
还有一个测试类
写在数据层的控制反转
@Repository
@Component也是控制反转
测试
依赖注入
这样就运行的JUnit
classes属性
如果把测试类放到其他地方去
测试类与引导类所在包不同
如果不同测试类放到其他地方会找不到bean 即拿不到spring的容器
引导类放到不同地方会报错
运行时对应不上
这时我们需要手动添加
用类加载器
package com.bigdata1421.springboot_junit;
import com.bigdata1421.springboot_junit.dao.BookDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = SpringbootJUnitApplication.class)
class SpringbootJUnitApplicationTests {
// 注入你要测试的对象
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
System.out.println("现在正在测试...");
bookDao.save();
}
}
spring整合JUnit
JUnit得拿到spring容器
默认就是路径对应的 不然找不到了 就拿不到了
然后就会报错
所以要用class指定
整合MyBatis
打开配置文件
application.yml
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
#专门用来配置的对象datasource
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis
username: root
password: 123456
操作数据库得有实体类
得有数据层
封装实体类
package com.bigdata1421.springboot_mybatis.domain;
import lombok.*;
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Data
@NoArgsConstructor //无参构造
@AllArgsConstructor //带参构造
public class User {
private Integer id;
private String name;
private Integer age;
private Integer gender;
private String phone;
}
开发数据层对应的接口
package com.bigdata1421.springboot_mybatis.dao;
import com.bigdata1421.springboot_mybatis.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserDao {
@Select("select * from user where id = #{id}")
public User getById(Integer id);
}
测试数据
回忆一下整个工程
@Mapper是为了让其被容器识别到
使其成为自动代理的对象
@Mapper
注解通常与 MyBatis 框架相关联,它用于标识接口或者类是 MyBatis 的映射器接口或者 XML 映射文件的提供者。MyBatis 是一个持久层框架,它允许开发者使用注解或者 XML 文件来配置 SQL 映射,从而在 Java 对象和数据库表之间进行映射。
在 MyBatis 中,@Mapper
注解有两种主要用法:
-
接口上的
@Mapper
注解:在 MyBatis 中,通常将 DAO(Data Access Object)接口标记为@Mapper
。这样,MyBatis 就会自动扫描这些标记了@Mapper
注解的接口,并为它们生成实现类。这些接口中定义了对数据库进行 CRUD 操作的方法。 -
XML 映射文件中的
<mapper>
元素:在 XML 映射文件中,可以使用<mapper>
元素包裹 SQL 映射语句。在这种情况下,@Mapper
注解通常用于指定 XML 文件的路径。无论是在接口上还是在 XML 文件中,
@Mapper
注解都告诉 MyBatis 框架去寻找 SQL 映射配置,以便于执行数据库操作。
整合MyBatis的常见问题
我们在调低mybatis依赖版本的时候会报错
这是 Mysql5 和 Mysql8 的区别
我们来看看这个错误
配置时区值
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
#专门用来配置的对象datasource
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
顺便换个驱动
小结
整合Mybatis-Plus
MP技术
中国人开发的一个技术
不学了
阿里云服务器今年把Mybatis-plus删掉了
整合Druid
德鲁伊数据库连接池
引入依赖
Maven依赖查找的插件
在工具里启动Maven search
引入依赖
这样写配置信息即可
这样就是druid专用的配置文件
# 配置相关信息
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
默认配置太强大了
框架之所以好用是因为有很多默认配置
如果boot不好用不如手搓Spring!!!!!
迟早有一天我能手搓Spring