4

我是推土机映射的新手

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

例如

class A {
          int a;
          int b;
}

class B {
    String c;
}

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

可以用一个映射配置文件来做到这一点吗?

4

2 回答 2

14

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

    One one = new One();
    one.setA(1);
    one.setB(2);

    Two two = new Two();
    two.setC("3");

    Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

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

    mapper.map(two, destination);

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

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

于 2013-09-25T12:32:29.320 回答
4

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

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>
于 2013-03-20T09:35:43.740 回答