代码之家  ›  专栏  ›  技术社区  ›  shrikant.sharma

不丢失现有数据的对象映射

  •  0
  • shrikant.sharma  · 技术社区  · 8 年前

    通常,对象映射器用于将较大的数据集映射到较小的数据集(例如: Entity 对象有很多数据,但我们只想返回其中的一些数据)。

    对象映射器通常会创建一个新的小集合目标对象实例,并从大集合的源对象中设置所需的字段,但我有相反的场景:我有一个目标对象已经包含一些数据,现在我需要将一个新的小数据集的源对象映射到目标对象中。

    源类

    public class SrcObj {
    private String name;
    private int i;
    

    目标类

    public class DestObj {
        private String name;
        private int i;
        private float f;
        private boolean b;
    

    DESOBJ已经包含int i和浮点f的值,SrCObJ有字符串名和int,我需要在不丢失现有数据的情况下保存SRCOBJ数据到StestObj.

    模型映射器总是创建destobj的新对象,该对象将srcobj映射到destobj中,但其余字段为空。

    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[name=“src name”,i=1,f=1.1,b=true]

    2 回复  |  直到 8 年前
        1
  •  0
  •   Chun Han Hsiao    8 年前

    首先,如果不想在类中使用getter/setter,可以启用字段匹配功能。

    modelMapper.getConfiguration()
        .setFieldMatchingEnabled(true)
        .setFieldAccessLevel(AccessLevel.PRIVATE);
    

    你可以简单地 modelMapper.map(src, dest) 这将从源更新dest的属性。

        2
  •  0
  •   shrikant.sharma    8 年前

    @春寒孝谢谢你的回复,它奏效了,只是为了解决问题。

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