【问题标题】:Dozer mapping : More than one source to destination推土机映射:不止一个来源到目的地
【发布时间】:2013-03-09 07:28:18
【问题描述】:

我是 DOZER 映射的新手

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

EG

class A {
          int a;
          int b;
}

class B {
    String c;
}

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

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

【问题讨论】:

    标签: java dozer


    【解决方案1】:

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

    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>
    

    【讨论】:

    • wildcard ="false",每次都会创建一个新对象。 wildcard="true" 复制到同一个对象中。
    • 通配符选项与字段匹配有关。使用 wildcard=false,您需要提及应映射的每个字段。 Wildcard=true 将按名称自动匹配。它不影响对象的创建。
    【解决方案2】:

    您只能映射两次。首先,使用 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]
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2014-05-22
    相关资源
    最近更新 更多