我有表格的类 -
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 performance tuning指南所说
使用BoundMapperFacade避免重复查找映射策略
所以我正在寻找使用下面的BoundedMapperFacade
来获得更好性能的内容
BoundMapperFacade<EdgeMtuMismatchEvent, EdgeMtuMismatchEventUI> facade = factory.getMapperFacade(EdgeMtuMismatchEvent.class, EdgeMtuMismatchEventUI.class, false)
我无法弄清楚如何在上面的代码段中添加MtuInterfaceMap
的映射器。
有人可以提出任何建议吗?
答案 0 :(得分:0)
BoundMapperFacade
会懒惰地从映射器工厂解析映射策略,并在第一次调用map()
方法时将其缓存。因此,当时所有必需的映射定义都应该在映射器工厂中注册。
根据需要,提供3种解决方案:
MtuInterfaceMap
和MtuInterfaceMapUI
类具有相同的字段集,则无需为它们声明classMap
。 Orika将默认复制列表元素,按名称映射字段; 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);