浅谈后端boot框架整合第三方技术JUnit MyBatis Druid整体思想

整合第三方技术

不要单单学习指定技术与springboot整合的方式

学习目标的是整合整体的技术的思路

拿到任何一个第三方技术后我们在springboot中如何操作

这是真正我们应该学习的东西

以后能整合任意技术

整合JUnit

JUnit 是一个流行的开源测试框架,用于 Java 编程语言。它提供了一种简单的方式来编写和执行 Java 代码的单元测试。以下是 JUnit 的一些关键方面:

  1. 注解:JUnit 使用注解来标记方法作为测试方法。@Test 注解用于标识应该由测试运行器执行的测试方法。

  2. 断言:JUnit 提供了一组断言方法,位于 org.junit.Assert 类(在 JUnit 4 中)或 org.junit.jupiter.api.Assertions 类(从 JUnit 5 开始),用于验证测试的预期结果。这些断言方法包括 assertEqualsassertTrueassertFalseassertNullassertNotNull 等。

  3. 测试运行器:JUnit 提供了一个测试运行器,负责运行测试并报告它们的结果。JUnit 的默认测试运行器是 JUnitCore,但根据所使用的 JUnit 版本,也可以使用其他测试运行器,如 JUnit4JUnit5

  4. 测试套件:JUnit 允许将多个测试用例分组成一个测试套件,使用 @RunWith 注解(JUnit 4)或 @Suite 注解(JUnit 5)。测试套件使您能够将多个测试一起作为单个测试运行。

  5. 参数化测试:JUnit 支持参数化测试,允许您使用不同的输入参数运行相同的测试。这个特性对于测试具有多组输入的方法特别有用。

  6. 测试夹具:JUnit 提供了注解,如 @Before@After@BeforeClass@AfterClass,用于定义应在每个测试方法之前或之后执行的方法(@Before@After)或在测试类中的所有测试方法之前或之后执行的方法(@BeforeClass@AfterClass)。这些方法通常用于设置测试夹具(例如,初始化对象)和清理资源。

  7. 异常处理:JUnit 允许您使用 @Test 注解的 expected 属性(JUnit 4)或 assertThrows 方法(JUnit 5)来测试在测试方法执行过程中是否抛出了特定的异常。

  8. 扩展: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 {// 注入你要测试的对象@Autowiredprivate BookDao bookDao;@Testvoid 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.Driverurl: jdbc:mysql://localhost:3306/mybatisusername: rootpassword: 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 注解有两种主要用法:

  1. 接口上的 @Mapper 注解:在 MyBatis 中,通常将 DAO(Data Access Object)接口标记为 @Mapper。这样,MyBatis 就会自动扫描这些标记了 @Mapper 注解的接口,并为它们生成实现类。这些接口中定义了对数据库进行 CRUD 操作的方法。

  2. 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.Driverurl: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTCusername: rootpassword: 123456

 顺便换个驱动

小结

整合Mybatis-Plus

MP技术

中国人开发的一个技术

不学了

阿里云服务器今年把Mybatis-plus删掉了

整合Druid

德鲁伊数据库连接池

引入依赖

Maven依赖查找的插件

在工具里启动Maven search

引入依赖

这样写配置信息即可

这样就是druid专用的配置文件

# 配置相关信息
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTCusername: rootpassword: 123456

默认配置太强大了

框架之所以好用是因为有很多默认配置

如果boot不好用不如手搓Spring!!!!!

迟早有一天我能手搓Spring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速复现NEJM文章亚组分析森林图?

现在亚组分析好像越来越流行&#xff0c;无论是观察性研究还是RCT研究&#xff0c;亚组分析一般配备森林图。 比如下方NEJM这张图&#xff0c;配色布局都比较经典美观&#xff01; 但是在使用R语言绘制时&#xff0c;想要绘制出同款森林图&#xff0c;少不了复杂参数进行美化调…

windows安装kafka环境

1.安装jdk8 参考教程java8安装教程_java8u371安装教程-CSDN博客 下载kafak安装包&#xff1a; kafka_2.12-3.6.1.tgz 解压&#xff1a; 启动ZooKeeper软件&#xff0c;kafka内部已近集成了该软件。 进入Kafka解压缩文件夹的config目录&#xff0c;修改zookeeper.properti…

傲软抠图一款专为抠图打造的AI智能抠图应用,智能识别人物物体抠图软件,无广vip版 v1.8.1

软件介绍 傲软抠图&#xff0c;作为一款高度专业化的智能人工智能图片处理软件&#xff0c;被设计专门用于执行精确的图像提取功能。该程序利用其先进的算法能动地识别和分辨图像中的人物或物体轮廓&#xff0c;并能够从原始图片材料中分离出带有透明背景的目标图像。除了自动…

GIT 新建分支和合并分支

文章目录 前言一、新建分支二、切回老分支&#xff0c;保留新分支的更改三、合并分支 前言 本文主要针对以下场景进行介绍&#xff1a; 场景一&#xff1a;创建新的分支 当前分支(dev_1)已经开发完毕&#xff0c;下一期的需求需要在新分支(dev_2)上进行开发&#xff0c;如何创…

[机缘参悟-187] - 《道家-水木然人间清醒1》读书笔记 - 真相本质 -10- 关系界限 - 一个人只有放下自我,才能看清世界的真相

目录 一、现实生活中&#xff0c;每个人都是盲人摸象 二、一个人认知的本质是神经网络的模型训练 三、每个人的认知具有局限 四、放下自我&#xff0c;就是跳出自我的认知局限 五、站在上帝的视角&#xff0c;俯瞰不同众生的千差万别的大脑认知系统 六、个体的独特性&…

【Linux】信号>信号产生信号处理信号保存信号详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.信号入门 1.1 生活角度的信号 1.2 技术应用角度的信号 1.3 信号概念 1.4 信号处理常见方式概览 2.产生信号 2.1 通过终端按键…

打包要求 minCompileSdk 使用指定版本及以上

我当前的 compileSdkVersion 30&#xff0c;因为依赖了 androidx.core:core:1.9.0 它要求最低 compileSdkVersion 33。 那么如果我不想升级 compileSdkVersion 应该怎么办&#xff1f; 答&#xff1a;当然是降低 core:core 版本&#xff01; 看看谁依赖了这两个版本 android…

CAN笔记第二篇,车载测试继续学起来!

在CAN协议中&#xff0c;“帧”是一个包含完整信息的独立单元&#xff0c;它具有特定的格式和结构&#xff0c;以确保数据在CAN总线上的可靠传输。这里的“帧”字可以理解为&#xff1a; 完整性&#xff1a;一个帧包含了所有必要的信息&#xff0c;从起始到结束&#xff0c;都遵…

# 分布式链路追踪_skywalking_学习(2)

分布式链路追踪_skywalking_学习&#xff08;2&#xff09; 一、分布式链路追踪_skywalking &#xff1a;Rpc 调用监控 1、Skywalking(6.5.0) 支持的 Rpc 框架有以下几种&#xff1a; Dubbo 2.5.4 -> 2.6.0Dubbox 2.8.4Apache Dubbo 2.7.0Motan 0.2.x -> 1.1.0gRPC 1.…

excel数据导入到数据库的方法(二)

以前写了一篇excel导入数据到数据库的文章&#xff0c;是先将excel导入到datatable中在进行批量插入操作&#xff0c;实现数据的导入工作&#xff1b;最近在写一个上传数据服务时&#xff0c;发现有些许问题&#xff0c;在此予以更正&#xff0c;问题描述&#xff1a; 就会报异…

计算机网络基础 - 计算机网络和因特网(1)

计算机网络基础 计算机网络和因特网什么是 Internet?具体构造的的角度服务角度网络结构 网络边缘网络核心电路交换分组交换概述排队时延和分组丢失转发表和路由选择协议按照有无网络层的连接 分组交换 VS 电路交换 接入网DSL 因特网接入电缆因特网接入光纤到户 FTTH无线接入网…

MySQL数据源不停机迁移到AWS RDS MySQL

就在近期&#xff0c;谷歌云捅了个大篓子&#xff0c;误删除了一家投资公司&#xff08;Unisuper&#xff0c;管理着800亿美元基金&#xff09;在谷歌云所有地域的所有数据&#xff0c;删得相当彻底&#xff0c;连备份数据都没给人家留一个。 Unisuper 是一家澳大利亚退休金基…

C++-逻辑语句

if语句 基本格式&#xff1a; 只有判断结果为true&#xff0c;才会执行后续{}内的代码 if (要执行的判断&#xff0c;结果需是bool型) {判断结果true&#xff0c;才会执行的代码; }if (条件判断) { 如果判断结果为true&#xff0c;会执行的代码; }else{如果判断结果为false…

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天&#xff0c;笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序&#xff0c;帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括&#xff1a; 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤&#xff1a; -使用微信开发…

封装了一个iOS中间放大的collectionView layout

效果图如下所示 原理&#xff1a;就是首先确定一个放大和缩小系数和原大小对应的基准位置&#xff0c;然后根据距离每个布局属性到视图中心的距离和基准点到中心的距离的差距/基准点到中心的距离&#xff0c; 计算出每个布局属性的缩放系数 下面是代码 // // LBHorizontalCe…

英语学习笔记22——Give me/him/her/us/them a .... Which one?

Give me/him/her/us/them a … Which one? 给我/他/她/我们/他们一个…… 哪一个&#xff1f; 词汇 Vocabulary empty a. 空的&#xff0c;啥也没有的    v. 倒空 例句&#xff1a;这个盒子是空的。    This box is empty.    这是个空盒子。    This is an emp…

学习笔记——STM32F103V3版本——HC-05模块控制数码管

一.硬件 1.HC-05模块 2.数码管 3.连接硬件 二.在keil5中的代码 main.c代码&#xff1a; #include "stm32f10x.h" #include "buletooth.h" #include "led.h" #include "sys.h" #include "usart.h" #include "delay.…

HTTP content-type MIME 类型(IANA 媒体类型)

Content-Type(MediaType)&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#xff0c;用于区分数据类型。最初MIME是用…

数据与结构--AVL树

目录 AVL树的概念 AVL树的性质 AVL树结点的定义 AVL树的插入 AVL树的旋转 左单旋 右单旋 左右双旋 右左单旋 AVL树的验证 AVL树的查找 AVL树的修改 AVL树的删除 AVL树的概念 二叉搜索树虽然可以提高我们查找数据的效率&#xff0c;但如果插入二叉搜索树的数据是…

LFSR线性反馈移位寄存器及Verilog实现

一、LFSR LFSR线性反馈移位寄存器&#xff0c;通常由移位寄存器和异或门组成&#xff0c;主要用于产生伪随机序列等。 线性反馈的含义是各个寄存器的输出通过一个反馈函数连接到第一级触发器的输入&#xff1b;LFSR中的寄存器的个数被称为LFSR的级数。 LFSR分为两类&#xff…