[英]Orika Mapping using BoundedMapperFacade for classes containing other objects
我有以下形式的课程-
class EdgeMtuMismatchEvent {
private final List<MtuInterfaceMap> list = new ArrayList<>();
private int id;
// public getters and setters
}
我必须将上面的类映射到下面的内容
class EdgeMtuMismatchEventUI {
private final List<MtuInterfaceMapUI> list = new ArrayList<>();
private int id;
// public getters and setters
}
我知道我可以像下面这样映射
final DefaultMapperFactory factory = new DefaultMapperFactory.Builder().build();
factory.classMap(MtuInterfaceMap.class, MtuInterfaceMapUI.class).byDefault().register();
factory.classMap(EdgeMtuMismatchEvent.class, EdgeMtuMismatchEventUI.class).byDefault().register();
//factory.getMapperFacade().map()
正如Orika性能调整指南所说
使用BoundMapperFacade避免重复查找映射策略
所以我正在寻找使用BoundedMapperFacade
东西,如下所示,以获得更好的性能
BoundMapperFacade<EdgeMtuMismatchEvent, EdgeMtuMismatchEventUI> facade = factory.getMapperFacade(EdgeMtuMismatchEvent.class, EdgeMtuMismatchEventUI.class, false)
我无法弄清楚如何在上面的代码片段中为MtuInterfaceMap
添加映射器。
有人可以建议什么吗?
BoundMapperFacade
将懒惰地解决映射器工厂中的映射策略,并在第一次调用map()
方法时对其进行缓存。 因此,所有必需的映射定义都应在那时向映射器工厂注册。
根据需要,可以提供3种解决方案:
MtuInterfaceMap
和MtuInterfaceMapUI
类具有相同的字段集,则无需为其声明classMap
。 Orika默认会复制列表元素,并按名称映射字段。 classMap
可以声明classMap
。 解决映射策略时,父类的映射将自动使用它。 MapperFactory
。 在这种情况下,父类的classMap
定义需要提示以使用此转换器,并且使用fieldMap().converter()
语法。 可以通过扩展BidirectionalConverter<List<MtuInterfaceMap>, List<MtuInterfaceMapUI>>
来编写自定义转换器。 示例代码可以编写如下:
final DefaultMapperFactory factory = new DefaultMapperFactory.Builder().build();
// (1) auto-mapping
// nothing here
// (2) if the scenario is simple enough
factory.classMap(MtuInterfaceMap.class, MtuInterfaceMapUI.class)
.field("comment", "details")
.byDefault()
.register();
// (3) if converter is required
final String listConverterId = "listConverter";
factory.getConverterMap()
.registerConverter(listConverterId , new MtuInterfaceMapListConverter());
//
factory.classMap(EdgeMtuMismatchEvent.class, EdgeMtuMismatchEventUI.class)
.fieldMap("list", "list").converter(listConverterId).add() // for case (3) only - declare converter
.byDefault()
.register();
BoundMapperFacade<EdgeMtuMismatchEvent, EdgeMtuMismatchEventUI> facade =
factory.getMapperFacade(EdgeMtuMismatchEvent.class,
EdgeMtuMismatchEventUI.class,
false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.