1、引入相关依赖和插件
<org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
引入mapstruct插件和lombok插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${compiler.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.reporting.outputEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
2、转换器
@Mapper
public interface CaseDeclareConverter {
CaseDeclareConverter INSTANCE = Mappers.getMapper(CaseDeclareConverter.class);
//支持一对一自定义转换,可以设置数据的类型等各种属性
@Mappings({
@Mapping(source = "state", target = "state")
})
CaseDeclareModel entityToModel(CaseDeclare caseDeclare);
//支持批量操作,内部调用entityToModel方法
List<CaseDeclareModel> entityToModelList(List<CaseDeclare> caseDeclareList);
//将model对象复制到导入导出模板对象中
@Mappings({
@Mapping(source = "state", target = "state")
})
CaseDeclareExcelTemplateDTO modelToExcelDTO(CaseDeclareModel caseDeclareModel);
}
3、编译模块
使用mvn clean compile编译转换器,生成实现类
4、查看实现类CaseDeclareConverterImpl
public class CaseDeclareConverterImpl implements CaseDeclareConverter {
public CaseDeclareConverterImpl() {
}
public CaseDeclareModel entityToModel(CaseDeclare caseDeclare) {
if (caseDeclare == null) {
return null;
} else {
CaseDeclareModel caseDeclareModel = new CaseDeclareModel();
caseDeclareModel.setState(caseDeclare.getState());
return caseDeclareModel;
}
}
public List<CaseDeclareModel> entityToModelList(List<CaseDeclare> caseDeclareList) {
if (caseDeclareList == null) {
return null;
} else {
List<CaseDeclareModel> list = new ArrayList(caseDeclareList.size());
Iterator var3 = caseDeclareList.iterator();
while(var3.hasNext()) {
CaseDeclare caseDeclare = (CaseDeclare)var3.next();
list.add(this.entityToModel(caseDeclare));
}
return list;
}
}
public CaseDeclareExcelTemplateDTO modelToExcelDTO(CaseDeclareModel caseDeclareModel) {
if (caseDeclareModel == null) {
return null;
} else {
CaseDeclareExcelTemplateDTO caseDeclareExcelTemplateDTO = new CaseDeclareExcelTemplateDTO();
caseDeclareExcelTemplateDTO.setState(caseDeclareModel.getState());
return caseDeclareExcelTemplateDTO;
}
}
}
实现类中采用get/set的方式复制属性到新对象,并且只在编译器才生成实现类。
5、使用转换器示例
CaseDeclareModel caseDeclare = new CaseDeclareModel();
CaseDeclareExcelTemplateDTO caseDeclareExcelTemplateDto = CaseDeclareConverter.INSTANCE.modelToExcelDTO(caseDeclare);
得到的caseDeclareExcelTemplateDto即复制后的对象。