java实体映射工具mapstruct

1、引入依赖jar包


   org.mapstruct
    mapstruct-jdk8
    ${mapstruct.version}


    org.mapstruct
    mapstruct-processor
    ${mapstruct.version}

2、官方网站提供了一种插件的方式:


    1.3.0.Final

...

    
        org.mapstruct
        mapstruct
        ${org.mapstruct.version}
    

...

    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.5.1 
            
                1.8 
                1.8 
                
                    
                        org.mapstruct
                        mapstruct-processor
                        ${org.mapstruct.version}
                    
                    
                
            
        
    

我们选择第一种方式即可。以下是使用方式

@Mapper(componentModel = "spring")
public interface AppointmentOrderConverter {
	@Mappings({
	        @Mapping(source = "request.arrivalTime", target = "arrivalTime", dateFormat = "yyyy-MM-dd HH:mm"),
	        @Mapping(source = "userId", target = "userId"),
	        @Mapping(target = "applicationTime", expression = "java(com.ftcs.core.utils.DateUtil.currentDate())"),
	        @Mapping(target = "createTime", expression = "java(com.ftcs.core.utils.DateUtil.currentDate())"),
	        @Mapping(target = "updateTime", expression = "java(com.ftcs.core.utils.DateUtil.currentDate())"),
	        @Mapping(target = "status", expression = "java(com.ftcs.core.common.context.AppointmentStatusEnum.TO_BE_PROCESSED.getCode())"),
	        @Mapping(target = "isDelete", constant = "0"),
	        @Mapping(target = "loanStatus", constant = "0")
	})
	AppointmentOrder request2domain(AppointmentRequest request, Long userId);
}

注解@Mapper和@Mapping

@Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口。@Mapper 里有个 componentModel 属性,主要是指定实现类的类型,一般用到两个属性

default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
spring:在接口的实现类上自动添加注解 @Component,可通过 @Autowired 方式注入

@Mapping:属性映射,若源对象属性与目标对象名字一致,会自动映射对应属性

source:源属性
target:目标属性
dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为 SimpleDateFormat的日期格式
ignore: 忽略这个字段

@Mappings:配置多个@Mapping
@MappingTarget 用于更新已有对象
@InheritConfiguration 用于继承配置

你可能感兴趣的:(java基础)