对象映射而不会丢失现有数据

时间:2018-06-30 05:38:38

标签: java oop modelmapper

通常,对象映射器用于方案将较大的数据集映射到较小的数据集(例如:Entity对象具有大量数据,但我们只希望返回其中一些)。

对象映射器通常会创建一个小目标对象的新实例,并从具有较大集合的源对象中设置必填字段,但我遇到了相反的情况:我有一个目标对象已经包含一些数据,现在我需要映射一个新的源对象,将较小的数据集设置为目标对象。

源类

public class SrcObj {
private String name;
private int i;

目的地舱

public class DestObj {
    private String name;
    private int i;
    private float f;
    private boolean b;

DesObj已经包含int i和float f的值,SrcObj具有String名称和int,我需要将SrcObj数据保存到DestObj中,而不会丢失现有数据。

Model Mapper始终创建一个新的DestObj对象,它将把SrcObj映射到其中,但其余字段为空。

public class ObjectMapper {
public static void main(String[] args) {
    SrcObj src = new SrcObj("src name", 1);
    DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
    dest = modelMapper.map(src, DestObj.class);
    System.out.println(dest);
}

private static ModelMapper modelMapper() {
    ModelMapper modelMapper = new ModelMapper();
    PropertyMap<SrcObj, DestObj> orderMap = new PropertyMap<SrcObj, DestObj>() {
        protected void configure() {
            // map().setI(destination.getI());
            map().setI(source.getI());
            System.out.println("model mapper");
            map().setName(source.getName());
        }
    };

    modelMapper.addMappings(orderMap);
    return modelMapper;
}
}

在模型映射器中,有一个使用目的地的选项,如上所述,但不起作用。

我如何让destObj包含所有值 destObj [name =“ src name”,i = 1,f = 1.1,b = true]

2 个答案:

答案 0 :(得分:0)

首先,如果您不想在课程中使用getter / setter,则可以启用字段匹配功能。

modelMapper.getConfiguration()
    .setFieldMatchingEnabled(true)
    .setFieldAccessLevel(AccessLevel.PRIVATE);

您可以简单地modelMapper.map(src, dest)从源代码更新目标的属性。

答案 1 :(得分:0)

@Chun Han Hsiao感谢您的回复,它的工作只是为了解决问题。

\S+ number