MapStruct详解及代码示例
时间: 2023-10-20 18:05:26 浏览: 172
MapStruct是一个Java注解处理器,可以帮助开发者快速生成Java Bean之间的映射代码。通过注解和代码生成,MapStruct能够自动映射两个Java Bean之间的属性。
下面是一个使用MapStruct的示例:
首先,在Maven项目中添加以下依赖:
```xml
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
<scope>provided</scope>
</dependency>
```
然后,我们需要定义两个Java Bean类,例如:
```java
public class SourceBean {
private String name;
private int age;
// getter and setter
}
public class TargetBean {
private String name;
private int age;
// getter and setter
}
```
接下来,我们需要定义一个Mapper接口,用于映射两个Java Bean之间的属性。例如:
```java
@Mapper
public interface MyMapper {
MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);
TargetBean sourceToTarget(SourceBean sourceBean);
}
```
在这个接口中,我们使用了MapStruct提供的@Mapper注解,表示这个接口是一个Mapper接口。同时,我们还定义了一个静态的INSTANCE实例,并使用了Mappers.getMapper方法来获取该实例。
接着,我们在这个接口中定义了一个sourceToTarget方法,用于将SourceBean映射到TargetBean。在这个方法中,我们只需要编写一个简单的映射规则即可,例如:
```java
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
TargetBean sourceToTarget(SourceBean sourceBean);
```
在这个方法中,我们使用了MapStruct提供的@Mapping注解,指定了SourceBean和TargetBean中属性之间的映射关系。例如,source = "name"表示SourceBean中的name属性映射到TargetBean中的name属性。
最后,在我们的代码中,我们可以使用MyMapper.INSTANCE.sourceToTarget方法来将SourceBean转换为TargetBean,例如:
```java
SourceBean sourceBean = new SourceBean();
sourceBean.setName("张三");
sourceBean.setAge(18);
TargetBean targetBean = MyMapper.INSTANCE.sourceToTarget(sourceBean);
System.out.println(targetBean.getName()); // 输出:张三
System.out.println(targetBean.getAge()); // 输出:18
```
这样,我们就完成了两个Java Bean之间的属性映射。使用MapStruct能够让我们的代码更加简洁和可维护,特别是在处理复杂的Java Bean之间的映射时,MapStruct能够大大提高我们的开发效率。
阅读全文