我有以下Mapper
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}
我期望mapListToBase
将使用mapToBase
来映射列表中的每个条目。但是,当我看到生成的代码时,我有以下
@Override
public List<RoleGuiBaseDto> mapListToBase(List<Role> roles) {
if ( roles == null ) {
return null;
}
List<RoleGuiBaseDto> list = new ArrayList<RoleGuiBaseDto>( roles.size() );
for ( Role role : roles ) {
list.add( roleToRoleGuiBaseDto( role ) );
}
return list;
}
protected RoleGuiBaseDto roleToRoleGuiBaseDto(Role role) {
if ( role == null ) {
return null;
}
RoleGuiBaseDto roleGuiBaseDto = new RoleGuiBaseDto();
roleGuiBaseDto.setId( role.getId() );
roleGuiBaseDto.setDescription( role.getDescription() );
return roleGuiBaseDto;
}
创建并使用了新的映射器方法,而不是使用mapToBase
。
如何告诉mapListToBase
使用mapToBase
。
注意:没有@Named
,一切都会很好。
答案 0 :(得分:2)
使用@Named
(使用@IterableMapping#qualifiedByName
)时,您需要限定映射方法:
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@IterableMapping(qualifiedByName = "mapToBase")
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}