推土机映射:到目的地的多个源

时间:2013-03-20 09:21:39

标签: java dozer

我是DOZER制图的新手

我们可以将多个源类的属性映射到目标吗?

EG

class A {
          int a;
          int b;
}

class B {
    String c;
}

class Destination {
    int a;
    int b;
    String c;
}

是否可以使用一个映射配置文件执行此操作?

2 个答案:

答案 0 :(得分:11)

你可以只映射两次。首先,使用Destination.class作为目标,然后使用第一个映射产生的Object作为目标:

    A a = new A();
    a.setA(1);
    a.setB(2);

    B b = new B();
    b.setC("3");

    Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

    Destination destination = mapper.map(a, Destination.class);

    mapper.map(b, destination);

    System.out.println(destination);
    // Destination [a=1, b=2, c=3]

这甚至适用于空映射配置文件。

答案 1 :(得分:3)

不是直接没有。您需要创建一个新类来包装您的两个源类并从中复制:

class D {
    private A a;
    private B b;
}

<mapping>
  <class-a>D</class-a>
  <class-b>C</class-b>
  <field>
    <a>a.a</a>
    <b>a</b>
  </field>
  <field>
    <a>a.b</a>
    <b>b</b>
  </field>
  <field>
    <a>b.c</a>
    <b>c</b>
  </field>
</mapping>

或者您需要复制两次,每次从每个源类复制到目标对象,确保不要删除现有字段。

<mapping wildcard="false">
    <class-a>A</class-a>
    <class-b>C/class-b>
    <field>
       <a>a</a>
       <b>a</b>
    </field>   
    <field>
       <a>b</a>
       <b>b</b>
    </field>   
</mapping>

<mapping wildcard="false">
    <class-a>B</class-a>
    <class-b>C/class-b>
    <field>
       <a>c</a>
       <b>c</b>
    </field> 
</mapping>