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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 浅谈后端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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
19天前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
3月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
3月前
|
JavaScript 中间件 API
深入浅出Node.js后端框架——Express
【8月更文挑战第27天】在这篇文章中,我们将一起探索Node.js的热门框架Express。Express以其简洁、高效的特点,成为了许多Node.js开发者的首选框架。本文将通过实例引导你了解Express的核心概念和使用方法,让你快速上手构建自己的Web应用。
|
5天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
23 1
|
28天前
|
Web App开发 JavaScript API
构建高效后端系统:Node.js与Express框架的实践之路
【9月更文挑战第37天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重要职责。本文将深入探讨如何利用Node.js及其强大的Express框架来搭建一个高效、可扩展的后端系统。我们将从基础概念讲起,逐步引导读者理解并实践如何设计、开发和维护一个高性能的后端服务。通过实际代码示例和清晰的步骤说明,本文旨在为初学者和有经验的开发者提供一个全面的指南,帮助他们在后端开发的旅途上走得更远。
37 3
|
9天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
16 0
|
20天前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。
|
2月前
|
缓存 监控 JavaScript
构建高效后端服务:Node.js与Express框架的完美结合
【9月更文挑战第18天】在数字化时代的浪潮中,后端服务的效率和稳定性成为了企业竞争力的关键。本文将深入探讨如何使用Node.js和Express框架来构建一个既高效又稳定的后端服务,同时通过实际代码示例,展示如何优化性能并确保服务的高可用性。
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit