我有以下DTO类:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Conclusion {
private Integer id;
// ......
private List<CType> cTypes;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CType {
private Integer id;
// ......
private VType vType;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "conclusion")
public class Conclusion {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Integer id;
// ......
@OneToMany
@JoinColumn(name = "id")
private List<CTypeEntity> cTypeEntities;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "c_types")
public class CTypeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false)
private Integer id;
// ......
@Column(name = "v_type_id")
private Integer vTypeId;
}
@Mapper
public interface ConclusionMapper {
@Mappings({
@Mapping(target = "cTypes", source = "cTypeEntities")
})
Conclusion toConclusion(ConclusionEntity entity);
List<Conclusion> toConclusionList(List<ConclusionEntity> entities);
@Mappings({
@Mapping(target = "cTypeEntities", source = "cTypes")
})
ConclusionEntity fromConclusion(Conclusion conclusion);
List<ConclusionEntity> fromConclusionList(List<Conclusion> conclusions);
@Mappings({
@Mapping(target = "cType", source = "vTypeId", qualifiedByName = "formVType")
})
ConclusionTaxType toCType(CTypeEntity cTypeEntity);
List<CType> toCTypes(List<CTypeEntity> cTypeEntities);
CTypeEntity fromCType(CType cType);
List<CTypeEntity> fromCTypeList(List<CType> cTypes);
@Named("formVType")
default VType formVType(CTypeEntity entity) {
// TODO: instantiate a DAO which will return an instance of VType
VTypeDao dao; // instantiate somehow
return vTypeDao.findById(entity.getVId());
}
}
VTypeDao看起来是这样的:
public interface VTypeDao {
VType findById(int id);
boolean exists(int id);
List<VType> findAll();
}
@Component
public class VTypeDaoImpl implements VTypeDao {
private final VTypeRepo vTypeRepo;
public VTypeDaoImpl(VTypeRepo vTypeRepo) {
this.vTypeRepo = vTypeRepo;
}
// ............................. method implementations
}
我的问题是:如何实例化VTypeDao的对象(或者至少是VTypeRepo,这样我就可以将if作为参数传递给VTypeDaoImpl)?
没有工厂类来获得VTypeDao的适当实现。
编辑:VTypeDao及其实现是我的项目的第三方组件。
从您的评论中,我发现您希望在映射过程中对VTypeDao进行查找。您可以将其包装在另一个类中,并将其作为@Context(注释为映射参数)提交。MapStruct不会将此类类视为源或目标。但是,它将在该类中调用生命周期方法。请看一下这个示例:https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-jpa-child-parent/src。
它是基于jpa的,但是您可以很容易地将它映射到您的问题…
例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?
以下是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将一个对象转换为另一个对象。我遇到了一些问题,我想找到一个替代方案,这就是我发现MapStruct的方式。 因此,我试图构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数。例如,我想要: 在mapper实现中,我会有如下内容: 如果有人能帮我做到这一点,我将不胜感激,这将节省我很多时间。 提前谢谢。
我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?
我试图找到一个更好的解决方案,以防止Hibernate代理初始化时,通过MapSTRt将实体映射到响应DTO。 我一直在将我们的代码库转换为使用ModelMapper中的MapStruct。如果我想用ModelMapper完成我的要求,我可以做如下简单的事情: 自定义getter方法允许我检查是否已经从数据库中获取了字段,以避免N 1次初始化。 它看起来像: 我不能简单地覆盖普通的getter,因
注意:我的jar是一个用Warbler编译成jar的jruby文件。
我有一个简单的Java单模块Gradle项目,其中我使用Mapstruct进行Java映射。我的如下所示: 我的源文件夹包含以下Java源代码: