MapStruct使用指南(一)——MapStruct引入与lombox配合使用

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写明转换规则,然后编译即可。

如现在有JobRequestJob两个类,需要实现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;
}
Job
JobRequest
id
name
type
arguments
name
type
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
}
JobRequest
JobAssembler
Job
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注解
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java MapStruct是一个代码生成器,用于处理Java bean之间的映射。它通过在编译时生成映射代码来提高性能,并且可以自定义映射逻辑。以下是使用Java MapStruct的步骤: 1. 添加MapStruct依赖项到Maven或Gradle项目中。 2. 创建一个Java接口,该接口定义了要映射的源和目标bean之间的映射方法。 3. 在接口上使用@Mapper注释,指定MapStruct生成的实现类的名称。 4. 在映射方法上使用@Mapping注释,指定源和目标bean属性之间的映射关系。 5. 在Maven或Gradle项目中运行编译命令,以生成MapStruct实现类。 6. 在代码中使用MapStruct生成的实现类来执行bean之间的映射。 下面是一个使用Java MapStruct的简单示例: 1. 添加MapStruct依赖项到Maven或Gradle项目中。 ```xml <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.4.2.Final</version> </dependency> ``` 2. 创建一个Java接口,该接口定义了要映射的源和目标bean之间的映射方法。 ```java @Mapper public interface CarMapper { CarDto carToCarDto(Car car); } ``` 3. 在接口上使用@Mapper注释,指定MapStruct生成的实现类的名称。 ```java @Mapper(componentModel = "spring") public interface CarMapper { CarDto carToCarDto(Car car); } ``` 4. 在映射方法上使用@Mapping注释,指定源和目标bean属性之间的映射关系。 ```java @Mapper(componentModel = "spring") public interface CarMapper { @Mapping(source = "numberOfSeats", target = "seatCount") CarDto carToCarDto(Car car); } ``` 5. 在Maven或Gradle项目中运行编译命令,以生成MapStruct实现类。 6. 在代码中使用MapStruct生成的实现类来执行bean之间的映射。 ```java @Autowired private CarMapper carMapper; public void example() { Car car = new Car("Morris", 5); CarDto carDto = carMapper.carToCarDto(car); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值