整合第三方技术
不要单单学习指定技术与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