Java 推土机映射:多个源到目标
我是推土机测绘新手 我们可以将多个源类的属性映射到目标类吗 乙二醇Java 推土机映射:多个源到目标,java,dozer,Java,Dozer,我是推土机测绘新手 我们可以将多个源类的属性映射到目标类吗 乙二醇 是否可以使用一个映射配置文件执行此操作?不是直接执行的否。您需要创建一个新类来包装两个源类,然后从中复制: class D { private A a; private B b; } <mapping> <class-a>D</class-a> <class-b>C</class-b> <field> <a>
是否可以使用一个映射配置文件执行此操作?不是直接执行的否。您需要创建一个新类来包装两个源类,然后从中复制:
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>
D类{
私人A;
私人B,;
}
D
C
a、 a
A.
a、 b
B
b、 c
C
或者您需要复制两次,从每个源类复制一次到目标对象,确保不清空现有字段
<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>
A.
C/b类>
A.
A.
B
B
B
C/b类>
C
C
您可以只映射两次。首先,使用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]
这甚至适用于空映射配置文件。wildcard=“false”,每次都会创建一个新对象。wildcard=“true”复制到同一对象中。通配符选项与字段匹配相关。如果wildcard=false,则需要提及应映射的每个字段。通配符=true将按名称自动匹配。它不影响对象创建。FWIW也支持此功能
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]