猿问

MapStruct:来自不同实体的字段映射到同一实体不同的字段

我有 A 类、B 类和 C 类。A 类有三个变量,它根据 B 类和 C 类的不同字段进行填充。当我使用映射器填充对象时,只保留最后使用的映射器值。如何确保填充所有值。我正在使用 MapStruct 映射器(版本 1.2.0)和 Spring Boot 版本 2.0.3


Sample code below:

Class A{


  String a;

  String b;

  String c;


  }


Class B{

 String b1;

}


Class C{

    String c1;

}


public interface AtoCmapper{

  @Mappings({

      @Mapping(target="c", source="source.c1")

  })

  A CtoA(C source);


  @Mappings({

      @Mapping(target="c1", source="source.c")

  })

  C AtoC(A source);

}


public interface AtoBmapper{

  @Mappings({

      @Mapping(target="b", source="source.b1")

  })

  A BtoA(B source);


  @Mappings({

      @Mapping(target="b1", source="source.b")

  })

  B AtoB(A source);

}


Class DAO{


 @Autowired

 AtoBmapper aToBMapper;


 @Autowired

 AtoCmapper aToCMapper;


 public void testMapping(){

  A aObject = new A();


  aObject = aToBMapper(bObject); // Assume bObject is object to Type B and it is initialized properly


  aObject = aToCMapper(cObject); // Assume cObject is object to Type B and it is initialized properly

 }


 //Now when I call testMapping() resulting A object only has value set for variable c, value of b is lost.

 How can I make sure that Values from B and C are set properly to Class A

}



三国纷争
浏览 616回答 1
1回答

侃侃无极

MapStruct 可以更新现有实例!为此,请通过具有@MappingTarget该类型的第二个注释参数的变体引入新的映射方法(或替换旧的方法)A(在这种情况下,可以用 替换返回类型void):// In AtoBmapper@Mappings(...)void updateAFromB(B source, @MappingTarget A target);// In AtoCmapper@Mappings(...)void updateAFromC(C source, @MappingTarget A target);然后你可以写:A aObject = new A();aToBMapper.updateAFromB(bObject, aObject);aToCMapper.updateAFromC(cObject, aObject);// now aObject should contain the cumulated data from b and c
随时随地看视频慕课网APP

相关分类

Java
我要回答