用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
@MappingTargetannotated target bean when the source property equalsnullor the presence check method results in ‘absent’.By default the target property will be set to null.
However:
By specifying
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULTon@Mapping,@BeanMapping,@Mapperor@MappingConfig, the mapping result can be altered to returndefaultvalues. ForListMapStruct generates anArrayList, forMapaHashMap, for arrays an empty array, forString``""and for primitive / boxed types a representation offalseor0. 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.IGNOREon@Mapping,@BeanMapping,@Mapperor@MappingConfig, the mapping result will be equal to the original value of the@MappingTargetannotated target.The strategy works in a hierarchical fashion. Setting
Mapping#nullValuePropertyMappingStrategyon mapping level will overridenullValuePropertyMappingStrategyon mapping method level will override@Mapper#nullValuePropertyMappingStrategy, and@Mapper#nullValuePropertyMappingStrategywill override@MappingConfig#nullValuePropertyMappingStrategy.