本文主要是介绍基础技术(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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!