不丢失现有数据的对象映射
Object Mapping without losing existing data
通常对象映射器用于将较大的数据集映射到较小的数据集的场景(例如:Entity
对象有很多数据,但我们只想return其中的几个) .
对象映射器通常创建一个新的小集合目标对象实例,并从大集合的源对象设置所需字段,但我有相反的情况:我有一个已经包含一些数据的目标对象,现在我需要将具有较小数据集的新源对象映射到目标对象。
来源Class
public class SrcObj {
private String name;
private int i;
目的地Class
public class DestObj {
private String name;
private int i;
private float f;
private boolean b;
DesObj 已经包含 int i 和 float f 的值,SrcObj 有 String name 和 int,我需要在不丢失现有数据的情况下将 SrcObj 数据保存到 DestObj。
模型映射器总是创建一个新的 DestObj 对象,它将 SrcObj 映射到它,但其余字段为空。
public class ObjectMapper {
public static void main(String[] args) {
SrcObj src = new SrcObj("src name", 1);
DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
dest = modelMapper.map(src, DestObj.class);
System.out.println(dest);
}
private static ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
PropertyMap<SrcObj, DestObj> orderMap = new PropertyMap<SrcObj, DestObj>() {
protected void configure() {
// map().setI(destination.getI());
map().setI(source.getI());
System.out.println("model mapper");
map().setName(source.getName());
}
};
modelMapper.addMappings(orderMap);
return modelMapper;
}
}
模型映射器中有一个使用目标的选项,上面已评论但它不起作用。
如何让 destObj 包含所有值
destObj[名称="src name",i=1,f=1.1,b=true]
首先,如果您不想在 类 中使用 getter/setter,您可以只启用字段匹配功能。
modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(AccessLevel.PRIVATE);
您只需 modelMapper.map(src, dest)
即可从源更新目标的属性。
@Chun Han Hsiao 感谢您的回复,有效,仅供参考。
SrcObj src = new SrcObj("src name", 1);
DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
modelMapper.map(src, dest);
System.out.println(dest);
通常对象映射器用于将较大的数据集映射到较小的数据集的场景(例如:Entity
对象有很多数据,但我们只想return其中的几个) .
对象映射器通常创建一个新的小集合目标对象实例,并从大集合的源对象设置所需字段,但我有相反的情况:我有一个已经包含一些数据的目标对象,现在我需要将具有较小数据集的新源对象映射到目标对象。
来源Class
public class SrcObj {
private String name;
private int i;
目的地Class
public class DestObj {
private String name;
private int i;
private float f;
private boolean b;
DesObj 已经包含 int i 和 float f 的值,SrcObj 有 String name 和 int,我需要在不丢失现有数据的情况下将 SrcObj 数据保存到 DestObj。
模型映射器总是创建一个新的 DestObj 对象,它将 SrcObj 映射到它,但其余字段为空。
public class ObjectMapper {
public static void main(String[] args) {
SrcObj src = new SrcObj("src name", 1);
DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
dest = modelMapper.map(src, DestObj.class);
System.out.println(dest);
}
private static ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
PropertyMap<SrcObj, DestObj> orderMap = new PropertyMap<SrcObj, DestObj>() {
protected void configure() {
// map().setI(destination.getI());
map().setI(source.getI());
System.out.println("model mapper");
map().setName(source.getName());
}
};
modelMapper.addMappings(orderMap);
return modelMapper;
}
}
模型映射器中有一个使用目标的选项,上面已评论但它不起作用。
如何让 destObj 包含所有值 destObj[名称="src name",i=1,f=1.1,b=true]
首先,如果您不想在 类 中使用 getter/setter,您可以只启用字段匹配功能。
modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(AccessLevel.PRIVATE);
您只需 modelMapper.map(src, dest)
即可从源更新目标的属性。
@Chun Han Hsiao 感谢您的回复,有效,仅供参考。
SrcObj src = new SrcObj("src name", 1);
DestObj dest = new DestObj(null, 0, 1, true);
ModelMapper modelMapper = ObjectMapper.modelMapper();
modelMapper.map(src, dest);
System.out.println(dest);