浅谈后端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 {

    // 注入你要测试的对象
    @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 注解有两种主要用法:

  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.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis优化笔记

Redis优化 一&#xff1a;Key&#xff1a; 1.1.Key的规范&#xff1a; 测试如下&#xff1a; 1.2.拒绝BigKey&#xff1a; 我们可以用&#xff1a; MEMORY USAGE name命令来看它的大小。 注意&#xff0c;这里的第二种之所以不使用Keys *&#xff0c;因为在实际生产时&#…

NDIS小端口驱动开发(一)

在四种NDIS相关的驱动中&#xff0c;微型端口驱动(也经常翻译为为小端口驱动)位于驱动栈的底部&#xff0c;一般将它理解为NIC设备的驱动程序&#xff1a; 有几种类型的微型端口驱动程序类型&#xff1a; 无连接微型端口驱动程序用于控制无连接网络媒体 &#xff0c;如以太网的…

SpringBoot接入Knife4j接口文档

0.介绍 1&#xff09; Knife4j是什么 Knife4j是Java MVC框架集成Swagger生成Api文档的增强解决方案&#xff0c;前身是swagger-bootstrap-ui&#xff0c;有着比Swagger更为美观的UI以及功能。 例如以下效果图&#xff1a; 2&#xff09; 官方链接 官网&#xff1a;Knife4j …

FastSAM 部署 rknn

基于yolov8(ultralytics)工程导出的FastSAM的onnx模型&#xff0c;后处理和yolov8seg是一样的。      模型和完整测试代码。 1 FastSAM 导出 onnx 导出onnx的方式有两种&#xff0c;一种使用FastSAM工程&#xff0c;一种是使用yolov8(ultralytics)工程。本篇博客使用yolov…

2024年【N1叉车司机】免费试题及N1叉车司机模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机免费试题考前必练&#xff01;安全生产模拟考试一点通每个月更新N1叉车司机模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过N1叉车司机模拟考试题库很简单。 1、【多选题】《中华人民共和国特…

3款录屏录制软件,打造专业级视频内容

随着技术的不断发展&#xff0c;人们在日常工作和学习中经常会遇到记录电脑屏幕的需求&#xff0c;例如录制游戏过程、制作教程、保存会议记录等。为了解决这一需求&#xff0c;许多录屏录制软件应运而生。本文将介绍三款常见的录屏录制软件&#xff0c;通过分析它们的特点和使…

【C++】<知识点> 标准模板库STL(上)

文章目录 一、STL---string类 1. 常用构造函数 2. 常用操作 3. 字符串流处理 二、STL---容器 1. STL及基本概念 2. 顺序容器简介 3. 关联容器简介 4. 容器适配器简介 5. 常用成员函数 三、STL---迭代器 1. 普通迭代器 2. 双向、随机访问迭代器 3. 不同容器的迭代器…

SpringBoot2.0.x旧版集成Swagger UI报错Unable to infer base url...解决办法

一、问题描述 1.1项目背景 SpringBoot2.0.9的旧版项目维护开发&#xff0c;集成Swagger-ui2.9.2无法访问的问题。不用想啊&#xff0c;这种老项目是各种过滤器拦截器的配置&#xff0c;访问不到&#xff0c;肯定是它们在作妖。懂得都懂啊&#xff0c;这里交给大家一个排错的办…

医院挂号就诊系统的设计与实现

前端使用Vue.js 后端使用SpiringBoot MyBatis 数据使用MySQL 需要项目和论文加企鹅&#xff1a;2583550535 医院挂号就诊系统的设计与实现_哔哩哔哩_bilibili 随着社会的发展&#xff0c;医疗资源分布不均&#xff0c;患者就诊难、排队时间长等问题日益突出&#xff0c;传统的…

基于机器学习预测未来的二氧化碳排放量(随机森林和XGBoost)

基于机器学习预测未来的二氧化碳排放量&#xff08;随机森林和XGBoost&#xff09; 简介&#xff1a; CO2排放是当今全球关注的环境问题之一。本文将使用Python对OWID提供的CO2排放数据集进行分析&#xff0c;并尝试构建机器学习模型来预测未来的CO2排放趋势。我们将探索数据…

Xilinx(AMD) FPGA通过ICAP原语读取芯片IDCODE实现方法

1 概述 Xilinx每种型号的FPGA芯片都有一个唯一的IDCODE与之对应&#xff0c;同一型号不同封装的IDCODE是相同的。IDCODE的获取方法包括JTAG、ICAP原语、AXI_HWICAP IP核等。获取IDCODE常用于根据芯片型号改变代码的功能&#xff0c;或者对代码进行授权保护&#xff0c;只能在指…

【汽车之家注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

Android kotlin协程

说明 可代替线程整异步可控制&#xff0c;灵活 &#xff08;控制优先级&#xff0c;内存占用等&#xff09;速度快 效率高有数量上限 使用 runBlocking 一般用于测试 不建议使用GlobalScope.launch 全局的 生命周期跟随application 不建议使用CoroutineScope(job) 用 基本使…

《python编程从入门到实践》day38

# 昨日知识点回顾 定义、迁移模型Entry # 今日知识点学习 18.2.7 Django shell 每次修改模型后&#xff0c;看到重启后的效果需要重启shell&#xff0c;退出shell会话Windows系统按ctrlZ或者输入exit() 18.3 创建页面&#xff1a;学习笔记主页 创建页面三阶段&#xf…

Postgresql源码(133)优化器动态规划生成连接路径的实例分析

物理算子的生成分为两步&#xff0c;基表的扫描路径生成set_base_rel_pathlists&#xff1b;连接路径生成&#xff08;make_rel_from_joinlist动态规划&#xff09;。本篇简单分析实现。看过代码会发现&#xff0c;“基表的扫描路径生成”其实就是作为连接路径生成dp计算的第一…

【Redis】 关于 Redis 哈希类型

文章目录 &#x1f343;前言&#x1f38b;命令介绍&#x1f6a9;hset&#x1f6a9;hget&#x1f6a9;hexists&#x1f6a9;hdel&#x1f6a9;hkeys&#x1f6a9;hvals&#x1f6a9;hgetall&#x1f6a9;hmget&#x1f6a9;hlen&#x1f6a9;hsetnx&#x1f6a9;hincrby&#x1…

快速分析变量间关系(Boruta+SHAP+RCS)的 APP(streamlit)

快速分析变量间关系&#xff08;BorutaSHAPRCS&#xff09;的 APP&#xff08;streamlit&#xff09; 以下情况下&#xff0c;你需要这个快速分析的APP: 正式分析之前的预分析&#xff0c;有助于确定分析的方向和重点变量&#xff1b;收集变量过程中&#xff0c;监测收集的变量…

如果突然失业,靠这个项目也能养活自己,6天收入3K

在前两天&#xff0c;我与两位好友相约外出就餐。当时正值雨天&#xff0c;我们便选择了一家大排档&#xff0c;边品尝美食边畅谈人生。聊得尽兴&#xff0c;直到凌晨一点多才回到家中。其中一位朋友最近刚刚遭遇裁员&#xff0c;为了寻找新的工作机会&#xff0c;他已经经历了…

简要的谈谈MySQL存储引擎

MySQL存储引擎 一、先从总体架构说起二、引擎介绍1.存储引擎2.如何更改数据库表引擎3.常用引擎及其特性对比4.如何选择不同类型的引擎 一、先从总体架构说起 1.MySQL架构就是一个客户端-服务器系统。架构可以分为Server层 和 Engine层两部分 连接器&#xff1a;连接器负责跟客…

【AI大模型】这可能是最简单的本地大模型工具,无须部署,一键使用

目录 前言 LM-Studio​编辑 那么问题来了&#xff0c;为什么我要在本地部署大模型&#xff1f; 隐私性&#xff1a; 定制性&#xff1a; 成本和体验的优化&#xff1a; 工具功能特点和使用方式介绍&#xff1a; 首页提供搜索功能和一些模型的推荐 模型下载管理&#x…