dateFormat
用于指定日期属性的格式化方式
@Mapper
public interface MyMapper {
@Mapping(source = "dateOfBirth", target = "birthDate", dateFormat = "yyyy-MM-dd")
TargetObject map(SourceObject source);
}
numberFormat
用于指定数字的格式化方式
@Mapper
public interface CarMapper {
@Mapping(source = "price", numberFormat = "$#.00")
CarDto carToCarDto(Car car);
}
source对应的字段要符合numberFormat的要求
constant:
用于将属性映射为常量值,如@Mapping(target = "status", constant = "ACTIVE")。
expression
允许你为源和目标属性之间的映射提供自定义的Java表达式。
@Mapper
public interface SourceTargetMapper {
@Mapping(target = "timeAndFormat",
expression = "java( new org.sample.TimeAndFormat( s.getTime(), s.getFormat() ) )")
Target sourceToTarget(Source s);
}
defaultExpression
defaultExpression属性的值应该是一个字符串,这个字符串应该是一个有效的SpEL(Spring Expression Language)表达式。
它允许你提供一个默认的表达式,该表达式在源属性值为null时指定
imports java.util.UUID;
@Mapper( imports = UUID.class )
public interface SourceTargetMapper {
SourceTargetMapper INSTANCE = Mappers.getMapper( SourceTargetMapper.class );
@Mapping(target="id", source="sourceId", defaultExpression = "java( UUID.randomUUID().toString() )")
Target sourceToTarget(Source s);
}
ignore
用于指示在映射过程中是否忽略特定的属性。这个属性可以设置为true或false
默认为false,表示不忽略目标属性,映射器会尝试将源属性映射到目标属性。为true,映射器将不会尝试将源属性映射到目标属性。
@Mapper
public interface MyMapper {
@Mapping(source = "sourceAge", target = "targetAge", ignore = true)
TargetObject mapWithAgeIgnored(SourceObject source);
}
qualifiedBy、qualifiedByName
用于指定映射处理的自定义方法。
qualifiedBy属性接受一个类型为java.lang.Class>的参数,用于指定一个实现了指定接口的类,该类中定义了自定义的映射方法。
qualifiedByName属性接受一个字符串作为参数,用于指定一个具有特定名称的方法。这个方法应该定义在实体类之间映射的转换逻辑。
@Mapper(component = "mapper")
public interface MyMapper {
@Mapping(source = "age", target = "age", qualifiedBy = MyCustomMapper.class)
Person person2PersonDTO(Person person);
}
@Mapper(component = "mapper")
public interface MyMapper {
@Mapping(source = "age", target = "age", qualifiedByName = "convertAge")
Person person2PersonDTO(Person person);
}
dependsOn
用于指定其他注解的映射,这些注解依赖于当前注解的映射。
@Mapper
public interface UserMapper {
@Mapping(target = "id", source = "user.id")
@Mapping(target = "name", source = "user.name", dependsOn = {"repositoryName"})
UserDTO userToUserDTO(User user);
}
指定了name字段依赖于repositoryName字段的映射。这意味着在将User转换为UserDTO时,MapStruct会首先处理repositoryName字段的映射,然后再处理name字段的映射。
defaultValue
它允许你为映射的字段指定一个默认值。当源对象中的字段值为null或未定义时,会使用默认值映射给目标字段
nullValueCheckStrategy
属性用于控制是否检查源属性是否为null。这个属性可以接受不同的值,以决定在映射时如何处理null值。以下是对nullValueCheckStrategy属性的详细说明:
属性有以下选项:
ON_IMPLICIT_CONVERSION(默认值):这是默认选项。当源属性为null时,MapStruct将仅在进行隐式类型转换时检查null。这意味着如果源属性和目标属性的类型不匹配,MapStruct会进行类型转换,但如果源属性为null,则会在进行类型转换时检查。
ALWAYS:设置为ALWAYS时,MapStruct将始终检查源属性是否为null,无论是否进行类型转换。这意味着即使源属性为null,MapStruct也会执行映射操作,但在映射过程中仍然会检查null值。
属性的选择取决于你的映射需求和业务逻辑。默认情况下,MapStruct会进行隐式类型转换并检查null值,这通常是合适的。但如果你希望始终检查null值,可以显式设置为ALWAYS。
nullValuePropertyMappingStrategy
用于控制在映射过程中如何处理null值的属性映射策略。这个属性可以设置为不同的值,以定义映射时的null值处理行为。
属性有以下选项:
SET_TO_NULL(默认值):当源属性为null时,MapStruct会将目标属性设置为null。这是默认的行为,表示如果源属性为null,则会将目标属性映射为null。
SET_TO_DEFAULT:当源属性为null时,MapStruct会将目标属性设置为其默认值(如果有)。这可以用于防止目标属性变为null,而是将其设置为默认值。
SKIP:当源属性为null时,MapStruct会跳过目标属性的映射,不做任何操作。
属性的选择取决于你的映射需求和业务逻辑。默认情况下,MapStruct会将源属性为null的情况下将目标属性设置为null。如果你希望在源属性为null时保留目标属性的默认值,可以设置为SET_TO_DEFAULT。