MapStruct属性映射
用于类之间进行映射转换。(对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦)
1、添加依赖
<!--实体映射MapStruct-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.0.Final</version>
</dependency>
2、使用
// @Mapper、@Mapping使用的是org.mapstruct包下的,而不是Mapper层的org.apache.ibatis.annotations @Mapper public interface ConvertUtils { // 1、定义 ConvertUtils INSTANCE = Mappers.getMapper(ConvertUtils.class); // 2、编写转换方法 // 2.1 简单情况 // 属性名称相同,直接转换 (只能多转少) DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //属性名称不同,source表示源属性,target表示目标属性 @Mapping(source = "itemSpace", target = "bytes") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //2.2 List转换 //第一步:正常转换内部类型 @Mapping(source = "itemSpace", target = "bytes") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //第二步:写一个同名的方法转换List类型 List<DatasetListResponse> datasetListToDatasetListResponse(List<Dataset> datasetList); //2.3 转换中需要用到自定义的方法 @Mapping(target = "modifyTime",expression = "java(com.xxx.datamanager.util.DateUtil.dateToStr(dataset.getModifyTime()))") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); } // 3、使用 //service中使用方式如下 List<DatasetListResponse> datasetResponseList = ConvertUtils.INSTANCE.datasetListToDatasetListResponse(datasetList);
@Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口
componentModel 属性:主要是指定实现类的类型,一般用到两个
default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
spring:在接口的实现类上自动添加注解 @Component,可通过 @Autowired 方式注入
@Mapping:属性映射,若源对象属性与目标对象名字一致,会自动映射对应属性
source:源属性
target:目标属性
dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为 SimpleDateFormat 的日期格式
ignore: 忽略这个字段
@Mappings:配置多个@Mapping
@MappingTarget 用于更新已有对象
@InheritConfiguration 用于继承配置
参考资料

浙公网安备 33010602011771号