mapStruct总结

mapStruct总结

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。

相关推荐

365bet官方网 阴阳师御魂第六层椒图速度要求
beat365中文版 迎 书法字典

迎 书法字典

📅 07-30 👁️ 6268