基础技术(MapStruct、SPI、TK-Mybatis)

2024-04-23 18:36

本文主要是介绍基础技术(MapStruct、SPI、TK-Mybatis),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、MapStruct
    • 使用
  • 二、SPI(Service Provider Interface)
    • 使用
  • 三、TK-Mybatis



一、MapStruct

用于简化 Java 对象之间的映射操作

DTO : Data Transport Object (数据传输对象)
VO: View Object (视图解析对象)


使用

public class Source {private String name;private int age;// 省略 getter 和 setter 方法
}public class Target {private String fullName;private int yearsOld;// 省略 getter 和 setter 方法
}

@Mapper
public interface MyMapper {@Mapping(source = "name", target = "fullName")@Mapping(source = "age", target = "yearsOld")Target sourceToTarget(Source source);
}

Source source = new Source();
source.setName("John");
source.setAge(30);// 在编译时会自动生成实现了映射接口的具体实现类, Mapper名称加Impl
MyMapper mapper = new MyMapperImpl(); 
Target target = mapper.sourceToTarget(source);System.out.println(target.getFullName()); // 输出 "John"
System.out.println(target.getYearsOld()); // 输出 "30"

二、SPI(Service Provider Interface)

主要用于构建可扩展的框架和库,使其能够在不修改源代码的情况下,允许第三方开发者提供自己的实现

SPI 的基本原理是,接口定义一个或多个抽象方法,然后为这个接口提供一个或多个实现。
在运行时,Java 的 SPI 机制会自动查找并加载这些实现,然后通过接口进行访问。
开发者可以通过简单地添加实现 jar 包来扩展应用的功能,而无需修改原始代码。

在 Java 中,SPI 是通过在 JAR 文件的 META-INF/services 目录下提供一个以接口名称命名的文本文件来实现的。
这个文件包含了实现类的全限定名,Java 在加载时会自动读取这些文件,并实例化对应的实现类。

SPI 的主要作用是 在运行时动态加载实现类,而不是在编译时静态绑定
通过 SPI,不需要显式地引用实现类
只需要在 SPI 文件中列出了实现类的全限定名,并在运行时使用 ServiceLoader.load(xxx.class) 加载它们


使用

public interface Animal {String makeSound();
}
public class Dog implements Animal {@Overridepublic String makeSound() {return "Woof";}
}
public class Cat implements Animal {@Overridepublic String makeSound() {return "Meow";}
}

创建 SPI 文件,命名为 META-INF/services/com.example.Animal
com.example.Dog
com.example.Cat

import java.util.ServiceLoader;public class Main {public static void main(String[] args) {ServiceLoader<Animal> serviceLoader = ServiceLoader.load(Animal.class);for (Animal animal : serviceLoader) {System.out.println(animal.makeSound());}}
}

三、TK-Mybatis

在 Mybatis 基础之上只做增强,不做改变


// UserMapper.java
// Mapper<User> 接口是 TK-MyBatis 中通用 Mapper 的接口之一,它提供了一组默认的 CRUD(创建、读取、更新、删除)操作方法
// 但其他的操作还是需要手写
public interface UserMapper extends Mapper<User> {// 无需定义 SQL 查询语句
}

<!-- UserMapper.xml -->
<!-- 空文件,无需手动编写 SQL 映射 -->

这篇关于基础技术(MapStruct、SPI、TK-Mybatis)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929573

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用