MapStruct使用指南
MapStruct引入
pom引用
支持与lombok一同使用,lombok和MapStruct都是利用注解生成代码
<properties>
<lombok.version>1.18.24</lombok.version>
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
</properties>
...
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
...
<!--
配置编译插件,自动生成对象转换代码,类似与lombok
MapStruct会依赖lombok的@Getter、@Setter等方法、
使用annotationProcessorPaths规定mapstruct与lombok注解处理顺序
防止MapStruct使用getter、setter方法时,lombok还没有生成,导致报错
-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- depending on your project -->
<target>1.8</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<!-- other annotation processors -->
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
IDEA插件
推荐安装IDEA插件MapStruct support,可直接在插件市场搜索
- 支持字段联想功能
- 支持字段的跳转
插件链接:https://plugins.jetbrains.com/plugin/10036-mapstruct-support
MapStruct使用方法
基本使用
映射需求
使用MapStruct实现两个对象的转换,首先编写一个接口类Interface,接口上需要使用MapStruct的注解@Mapper,表明这是一个转换接口,需要MapStruct在编译时自动生成转换代码。然后编写方法,并在方法上使用MapStruct的注解@Mapping写明转换规则,然后编译即可。
如现在有JobRequest和Job两个类,需要实现JobRequest->Job的映射
public class JobRequest {
private String name;
private String type;
private List<String> arguments;
}
public class Job {
private String id;
private String name;
private String type;
private List<String> arguments;
}
MapStruct转换接口
// 标识是MapStruct的转换接口
@Mapper
public interface JobAssembler {
// 转换类的单例,需要使用的地方调用JobAssembler.INSTANCE.toJob()即可
JobAssembler INSTANCE = Mappers.getMapper(JobAssembler.class);
@Mapping(target = "id", ignore = true)
@Mapping(target = "name", source = "name")
@Mapping(target = "type", source = "type")
@Mapping(target = "arguments", source = "arguments")
Job toJob(JobRequest request);
}
使用MapStruct转换接口
pubic void processJobRequest(JobRequest jobRequest) {
Job job = JobAssembler.INSTANCE.toJob(jobRequest);
// job处理, do something
}
MapStruct生成代码
在编译阶段,MapStruct会自动生成转换接口JobAssembler的实现类JobAssemblerImpl的代码。
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-06-05T20:04:07+0800",
comments = "version: 1.4.2.Final, compiler: javac, environment: Java 1.8"
)
public class JobAssemblerImpl implements JobAssembler {
@Override
public Job toJob(JobRequest jobRequest) {
if ( jobRequest == null ) {
return null;
}
Job job = new Job();
job.setName( jobRequest.getName() );
job.setType( jobRequest.getType() );
job.setArguments( jobRequest.getArguments() );
return job;
}
基本映射规则
- 当属性名相同时,默认会进行映射,不必显式使用
@Mapping注解 - 当属性名不同时,需要显式使用
@Mapping注解
MapStruct是一个代码生成库,用于简化对象到对象的映射。通过在接口上使用@Mapper注解,MapStruct可以在编译时自动生成转换代码。与Lombok结合使用时,需在Maven的编译插件配置中指定注解处理器顺序。MapStruct支持字段映射,并提供IDEA插件增强开发体验。文章提供了JobRequest到Job转换的例子,展示了基本的使用方法和映射规则。
——MapStruct引入与lombox配合使用&spm=1001.2101.3001.5002&articleId=131542533&d=1&t=3&u=0c2e75d9cd7642589f96be090f11f676)
416

被折叠的 条评论
为什么被折叠?



