1.安装两个插件
- mapstruct-eclipse 插件
- 插件说明:在写java代码时提供一些格外的帮助信息
- 安装:eclipse market 中搜索安装
- m2e-apt 插件
- 插件说明:编译时自动处理mapstruct注解
- 安装:访问官网按照提示安装
2.maven依赖引入
...
<properties>
<org.mapstruct.version>1.4.1.Final</org.mapstruct.version>
</properties>
...
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<scope>${org.mapstruct.version}</scope>
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>-Amapstruct.suppressGeneratorTimestamp=true</compilerArg>
<compilerArg>-Amapstruct.verbose=true</compilerArg>
<compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
3.java使用
1.数据源类
public class TestEntity{
private Integer age;
private Ineger id;
private String name;
}
public class TestChildEntity{
private Integer sex;
}
2.目标类
public class TestVo{
private Integer age;
private Ineger entityId;
private String entityName;
private Integer entitySex;
private TestEntity testEntity;
}
3.转换器接口
@Mapper
public interface TestConverter {
@Mappings({
@Mapping(target = "testEntity", ignore = true),
@Mapping(source = "id", target = "entityId")
})
TestVo testToTestVo(TestEntity entity);
@Mappings({
@Mapping(source = "child.sex", target = "entitySex"),
@Mapping(source = "entity.name", target = "entityName")
})
TestVo testToTestVo(TestEntity entity, TestChildEntity child);
}
- 转换器接口要标注@Mapper注解
- 接口中定义转换器方法,参数作为数据源对象,返回值作为目标对象。如果数据源属性包含目标对象属性则可以省略@Mappings注解
- @Mappings注解自定义源和目标的属性映射关系,用于源和目标属性不一致的情况
- 如果有多个数据源,则 @Mapping.source属性值必须要加上方法参数前缀,如上child.sex
4.常用注解说明
- @Mappings :定义源和目标对象的属性名映射关系
属性 | 说明 |
---|
target | 目标属性名 |
source | 源属性名 |
dateFormat | 如果源属性是Date类型,目标是String类型,则使用此格式格式化Date |
numberFormat | 如果源属性是数字类型,目标是String类型,则使用此格式格式化数字 |
ignore | 忽略目标属性 |