4

DOZERマッピングは初めてです

プロパティを複数のソースクラスから宛先にマップできますか?

例えば

class A {
          int a;
          int b;
}

class B {
    String c;
}

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

1つのマッピング構成ファイルでこれを行うことは可能ですか?

4

2 に答える 2

14

2回だけマップできます。まず、Destination.classをターゲットとして使用し、次に最初のマッピングの結果であるオブジェクトをターゲットとして使用します。

    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

直接ではありません。2つのソースクラスをラップアラウンドする新しいクラスを作成し、そこからコピーする必要があります。

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>

または、既存のフィールドを空白にしないように注意しながら、各ソースクラスから宛先オブジェクトに1回ずつ、2回コピーする必要があります。

<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 に答える