使用来自另一个映射器的更新方法映射
Use update mehtod mapping from other mapper
我有两个映射器
@Mapper(uses= {ChildMapper.class})
public abstract class ParentMapper {
@Mappings...
public abstract Parent dtoToParent(
final ParentDto dto);
@InheritConfiguration(name = "dtoToParent")
public abstract Parent updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
}
@Mapper()
public abstract class ChildMapper {
Child dtoToChild(
final ChildDto dto);
Set<Child> dtosToChilds(
final Set<ChildDto> childs);
Child updateChildFromDto(
final ChildDto dto,
final @MappingTarget Child geo);
}
生成实现时,如何指示 MapStruct 在 updateParentFromDto 方法中使用 updateChildFromDto 方法。它使用 dtosToChilds 生成,而 dtosToChilds 又使用 dtoToChild 方法。
原因,当对象存在时,我想更新属性而不是创建新属性,而当 不存在创建新的.
MapStruct 如何(以通用方式)识别对象是否存在于目标集中?
但是没有什么能阻止您编写自己的实现来做到这一点。像这样:
@Mapper()
public abstract class ChildMapper {
abstract Child dtoToChild(ChildDto dto);
abstract Child updateChildFromDto( ChildDto dto, @MappingTarget Child geo);
Set<Child> dtosToChilds(final Set<ChildDto> childs);
// NOTE the void, I don't like to return a mapping target. MapStruct calls
// update methods from update methods an regular methods from regular methods
// using both in one signature, things tend to get blurry
void updateDtosToChilds(Set<ChildDto> childs, @MappingTarget Set<Child> target){
for ( ChildDto child : childs {
Child targetChild = null;
// get matching child from target
if ( targetChild != null ) {
updateChildFromDto( child, targetChild );
}
else {
target.add( dtoToChild( child ) );
}
}
}
}
如上所示,不要这样做:
@InheritConfiguration(name = "dtoToParent")
public abstract Parent updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
而是
@InheritConfiguration(name = "dtoToParent")
public abstract void updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
我有两个映射器
@Mapper(uses= {ChildMapper.class})
public abstract class ParentMapper {
@Mappings...
public abstract Parent dtoToParent(
final ParentDto dto);
@InheritConfiguration(name = "dtoToParent")
public abstract Parent updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
}
@Mapper()
public abstract class ChildMapper {
Child dtoToChild(
final ChildDto dto);
Set<Child> dtosToChilds(
final Set<ChildDto> childs);
Child updateChildFromDto(
final ChildDto dto,
final @MappingTarget Child geo);
}
生成实现时,如何指示 MapStruct 在 updateParentFromDto 方法中使用 updateChildFromDto 方法。它使用 dtosToChilds 生成,而 dtosToChilds 又使用 dtoToChild 方法。
原因,当对象存在时,我想更新属性而不是创建新属性,而当 不存在创建新的.
MapStruct 如何(以通用方式)识别对象是否存在于目标集中?
但是没有什么能阻止您编写自己的实现来做到这一点。像这样:
@Mapper()
public abstract class ChildMapper {
abstract Child dtoToChild(ChildDto dto);
abstract Child updateChildFromDto( ChildDto dto, @MappingTarget Child geo);
Set<Child> dtosToChilds(final Set<ChildDto> childs);
// NOTE the void, I don't like to return a mapping target. MapStruct calls
// update methods from update methods an regular methods from regular methods
// using both in one signature, things tend to get blurry
void updateDtosToChilds(Set<ChildDto> childs, @MappingTarget Set<Child> target){
for ( ChildDto child : childs {
Child targetChild = null;
// get matching child from target
if ( targetChild != null ) {
updateChildFromDto( child, targetChild );
}
else {
target.add( dtoToChild( child ) );
}
}
}
}
如上所示,不要这样做:
@InheritConfiguration(name = "dtoToParent")
public abstract Parent updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);
而是
@InheritConfiguration(name = "dtoToParent")
public abstract void updateParentFromDto(
final ParentDto dto,
final @MappingTarget Parent parent);