简体   繁体   English

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

[英]Dozer mapping : More than one source to destination

Im new to DOZER mapping我是 DOZER 映射的新手

Can we map properties from more than one source class to destination?我们可以将属性从多个源类映射到目标吗?

EG例如

class A {
          int a;
          int b;
}

class B {
    String c;
}

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

Can it be possible to do this with one mappings configuration file ?可以用一个映射配置文件来做到这一点吗?

You can just map twice.你可以只映射两次。 First, use Destination.class as target, then use the Object that resulted from the first mapping as target:首先,使用 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]

This even works with an empty mapping configuration file.这甚至适用于空的映射配置文件。

Not directly no.不是直接没有。 You would need to either create a new class to wrap around your two source classes and copy from that:您需要创建一个新类来包装您的两个源类并从中复制:

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>

Or you would need to copy twice, once from each source class to the destination object, making sure not to blank out existing fields.或者您需要复制两次,一次从每个源类复制到目标对象,确保不要清空现有字段。

<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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM