用于mps增强集合类转换
- ConvertMethod优化成Builder
- fieldWrapper支持source和target类型不匹配时转换
- 支持部分原生功能,如condition和expression
- 拆包将运行级和编译级的分开
<dependency>
<groupId>com.pythonsinger.plugin</groupId>
<artifactId>mapstruct-collection-plus</artifactId>
</dependency>名称转换器必须被Spring管理,且必须实现NameConvertService的转换接口
public interface MemberService extends BasicConvertService<Long,String> {
}
@Service
public class MemberServiceImpl implements MemberService {
@DubboReference
private MemberDubboService memberDubboService;
@Override
public Map<Long, String> getNameMapByIds(Collection<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return Collections.emptyMap();
}
List<MemberListDTO> memberListByIds = memberDubboService.getMemberListByIds(ids.stream().map(Long::intValue).distinct().collect(Collectors.toList()));
return memberListByIds.stream().collect(
Collectors.toMap(
item -> item.getMemberId().longValue(),
MemberListDTO::getRealName));
}
}将Mapper的componentModel改为spring,并用ItemNameMapping修饰List转换的Method
@Mapper(componentModel="spring")
public interface SupplierConfigConvert {
@ItemNameMapping(keyField ="updateBy",target = "updateByName",service = MemberService.class)
List<SupplierConfigBO> convertToBoList(List<SupplierConfigEntity> list);
}@Override
public List<SupplierConfigBO> list(SupplierConfigQueryParams reqVO) {
QueryWrapper queryWrapper = QueryConditionBuilder.toWrapper(reqVO);
List<SupplierConfigEntity> list = iSupplierConfigSerive.list(queryWrapper);
return supplierConfigConvert.convertToBoList(list);
}@Component
public class SupplierConfigConvertImpl implements SupplierConfigConvert {
@Resource
private MemberService memberService;
@Override
public SupplierConfigBO convertToBo(SupplierConfigEntity supplierConfigEntity) {
if ( supplierConfigEntity == null ) {
return null;
}
SupplierConfigBO supplierConfigBO = new SupplierConfigBO();
supplierConfigBO.setId( supplierConfigEntity.getId() );
supplierConfigBO.setStatus( supplierConfigEntity.getStatus() );
supplierConfigBO.setCreatedBy( supplierConfigEntity.getCreatedBy() );
supplierConfigBO.setUpdatedBy( supplierConfigEntity.getUpdatedBy() );
supplierConfigBO.setCreatedAt( supplierConfigEntity.getCreatedAt() );
supplierConfigBO.setUpdatedAt( supplierConfigEntity.getUpdatedAt() );
return supplierConfigBO;
}
@Override
public List<SupplierConfigBO> convertToBoList(List<SupplierConfigEntity> list) {
if ( list == null || list.isEmpty()) {
return null;
}
List<SupplierConfigBO> list1 = new ArrayList<SupplierConfigBO>( list.size() );
Set<Long> arr0 = new HashSet<>();
for ( SupplierConfigEntity supplierConfigEntity : list ) {
if (supplierConfigEntity.getUpdatedBy()!=null){
arr0.add(supplierConfigEntity.getUpdatedBy());
}
}
Map<Long, String> memberMap = memberService.getNameMapByIds(arr0);
for ( SupplierConfigEntity supplierConfigEntity : list ) {
SupplierConfigBO tempVar = convertToBo( supplierConfigEntity );
if (supplierConfigEntity.getUpdatedBy()!=null){
tempVar.setUpdatedByName(memberMap.get(supplierConfigEntity.getUpdatedBy()));
}
list1.add(tempVar);
}
return list1;
}
}如果NameConvertService的泛型非基本类,而是一个业务Class,可通过ItemNameMapping中的source字段指定目标field需要映射表中的哪一个field。