使用dozer實現對象轉換

Dozer的github地址:https://github.com/DozerMapper/dozer
Dozer的官方文檔:http://dozer.sourceforge.net/
什麼是Dozer
Dozer是一個JavaBean映射工具庫。
Dozer是Java Bean到Java Bean映射器,將數據從一個對象遞歸到另外一個對象,它是一個開放源代碼映射框架,是強大的,通用的,靈活的,可重用的和可配置的。
Dozer支持簡單的屬性映射,複雜類型映射,雙向映射,隱式顯式映射以及遞歸映射。 這包括在元素級別還須要映射的映射集合屬性。
Dozer不只支持屬性名稱之間的映射,並且還能夠在類型之間自動轉換。 大多數轉換方案都是開箱即用的,但Dozer還容許您經過XML或基於代碼的配置指定自定義轉換。php

Dozer有三種映射配置方式:java

註解方式
API方式
XML方式git

在springboot中的使用
1.引入依賴
項目使用maven,添加如下依賴到你的pom.xml便可:
版本(Apr 22, 2014)目前maven倉庫中最新的版本github

<dependency> <groupId>net.sf.dozer</groupId> <artifactId>dozer</artifactId> <version>5.5.1</version> </dependency> 

若是要映射的兩個對象有徹底相同的屬性名,那麼一切都很簡單。
只須要直接使用Dozer的API便可:spring

Mapper mapper = new DozerBeanMapper(); DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class); 

實際應用,項目須要返回VO類的數據,但你在mapper中是使用PO類,返回時須要轉換springboot

Mapper announcementDozerMapper =new DozerBeanMapper(); /** * @param announcementPo 原PO類的announcement類型 * @return 返回VO類的announcement類型 * @description 將announcement的PO類轉化爲VO類 **/ private AnnouncementVo doToVo(AnnouncementPo announcementPo){ if(announcementPo == null) { return null; } AnnouncementVo vo = announcementDozerMapper.map(announcementPo, AnnouncementVo.class); return vo; } 

假如是集合對象呢,實際上就是使用JAVA8的stream流app

Mapper announcementDozerMapper =new DozerBeanMapper(); /** * @param announcementPos 原PO類的announcement類型集合 * @return 返回VO類的announcement類型集合 * @description 將announcement的PO類集合轉化爲VO類集合 **/ private List<AnnouncementVo> doToVo(List<AnnouncementPo> announcementPos){ if(announcementPos == null) { return null; } return announcementPos .stream() .map(announcement -> this.announcementDozerMapper.map(announcement, AnnouncementVo.class)) .collect(Collectors.toList()); } 

注:官網着重建議:在現實應用中,最好不要每次映射對象時都建立一個Mapper實例來工做,這樣會產生沒必要要的開銷。若是你不使用IoC容器(如:spring)來管理你的項目,那麼,最好將Mapper定義爲單例模式。
如何來定義爲單例模式呢?
1.建立類的惟一實例,加static變爲類的成員框架

public class DozerMapperConstant { public static final Mapper dozerMapper = new org.dozer.DozerBeanMapper(); } 

2.獲取類的實例,經過類名.成員獲取實例maven

Mapper announcementDozerMapper =  DozerMapperConstant.dozerMapper;

參考文章:http://www.alliedjeep.com/146242.htm工具

相關文章
相關標籤/搜索