一、简介
现在的分布式系统中模块划分越来越细,不同模块的实体、DTO、DO等需要进行转换,这么多工程处理起来不是那么简单。
MapStruct 就是这样的一个属性映射插件,用于为Java Bean生成类型安全且高性能的映射。它基于编译阶段生成get/set代码,此实现过程中没有反射,不会造成额外的性能损失。只需要定义一个 Mapper 接口,MapStruct 就会自动实现这个映射接口,避免了繁琐的映射实现。
优点
与手工编写映射代码相比
- MapStruct通过生成冗长且容易出错的代码来节省时间。
与动态映射框架相比
-
简单泛型智能转换;
-
效率高:无需手动 set/get 或 implements Serializable 以达到深拷贝;
-
性能更高:使用简单的 Java 方法调用代替反射;
-
编译时类型安全:只能映射相同名称或带映射标记的属性;
-
编译时产生错误报告:如果映射不完整(存在未被映射的目标属性)或映射不正确(找不到合适的映射方法或类型转换)则会在编译时抛出异常。
二、Demo
2.1 导入依赖
使用该插件主要需要导入两个包:
::: details Maven | Gradle
Maven
<dependency>
<groupId>org.mapstruct</groupId>
<!-- jdk8以下就使用mapstruct -->
<artifactId>mapstruct-jdk8</artifactId>
<version>1.3.0.Final</version>
</dependency>
<!-- 注解处理器 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.0.Final