用JPA在做更新的时候经常要判断不是null的字段进行set很麻烦。
例如:目标实体 A.a1=1,A.a2=2 源实体 B.a1=null,B.a2=1。要实现转换后 A.a1=1,A.a2=1。
1、class上加注解。这个注解参数好像1.3版本以后才开始有的。
@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
2、必须用更新现有的Bean的方法。
void updateAFromB(B b, @MappingTarget A a);
mapstruct 1.3.1版文档原文
10.6. Controlling mapping result for ‘null’ properties in bean mappings (update mapping methods only).
MapStruct offers control over the property to set in an
@MappingTarget
annotated target bean when the source property equalsnull
or the presence check method results in ‘absent’.By default the target property will be set to null.
However:
By specifying
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT
on@Mapping
,@BeanMapping
,@Mapper
or@MappingConfig
, the mapping result can be altered to returndefaultvalues. ForList
MapStruct generates anArrayList
, forMap
aHashMap
, for arrays an empty array, forString``""
and for primitive / boxed types a representation offalse
or0
. For all other objects an new instance is created. Please note that a default constructor is required. If not available, use the@Mapping#defaultValue
.By specifying
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE
on@Mapping
,@BeanMapping
,@Mapper
or@MappingConfig
, the mapping result will be equal to the original value of the@MappingTarget
annotated target.The strategy works in a hierarchical fashion. Setting
Mapping#nullValuePropertyMappingStrategy
on mapping level will overridenullValuePropertyMappingStrategy
on mapping method level will override@Mapper#nullValuePropertyMappingStrategy
, and@Mapper#nullValuePropertyMappingStrategy
will override@MappingConfig#nullValuePropertyMappingStrategy
.