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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent(兼容OpenClaw),2核4GB
简介: 浅谈后端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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
SQL XML Java
346 0
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
720 70
|
SQL XML Java
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
449 69
|
缓存 负载均衡 算法
深入理解后端服务的负载均衡技术
在现代网络服务架构中,高效的负载均衡策略对于保证应用性能和可靠性至关重要。本文将深入探讨后端服务中的负载均衡技术,包括其重要性、常见算法以及如何实现高效均衡。通过分析不同的负载均衡方法,我们旨在为开发者提供实用的指导,帮助他们优化自己的系统架构。
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
610 1
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
397 7
|
运维 Kubernetes 开发者
构建高效后端服务:微服务架构与容器化技术的结合
【10月更文挑战第18天】 在数字化转型的浪潮中,企业对后端服务的要求日益提高,追求更高的效率、更强的可伸缩性和更易于维护的系统。本文将探讨微服务架构与容器化技术如何结合,以构建一个既灵活又高效的后端服务体系。通过分析当前后端服务面临的挑战,介绍微服务和容器化的基本概念,以及它们如何相互配合来优化后端服务的性能和管理。本文旨在为开发者提供一种实现后端服务现代化的方法,从而帮助企业在竞争激烈的市场中脱颖而出。
339 0
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
419 2
|
安全 Java 关系型数据库
探索后端技术:构建高效、安全的应用服务
在当今数字化浪潮中,后端技术作为软件架构的核心支柱,承载着处理数据逻辑、保障应用性能与安全等关键任务。本文旨在深入浅出地探讨后端开发的重要概念、主流技术栈以及未来发展趋势,为开发者提供一份指南,以助力构建既高效又安全的应用程序。
|
12月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1630 1
Spring boot 使用mybatis generator 自动生成代码插件