[英]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.