Dozer的github位址: https://github.com/DozerMapper/dozer Dozer的官方文檔: http://dozer.sourceforge.net/
什麼是Dozer
Dozer是一個JavaBean映射工具庫。
Dozer是Java Bean到Java Bean映射器,将資料從一個對象遞歸到另一個對象,它是一個開放源代碼映射架構,是強大的,通用的,靈活的,可重用的和可配置的。
Dozer支援簡單的屬性映射,複雜類型映射,雙向映射,隐式顯式映射以及遞歸映射。 這包括在元素級别還需要映射的映射集合屬性。
Dozer不僅支援屬性名稱之間的映射,而且還可以在類型之間自動轉換。 大多數轉換方案都是開箱即用的,但Dozer還允許您通過XML或基于代碼的配置指定自定義轉換。
Dozer有三種映射配置方式:
注解方式
API方式
XML方式
在springboot中的使用
1.引入依賴
項目使用maven,添加以下依賴到你的pom.xml即可:
版本(Apr 22, 2014)目前maven倉庫中最新的版本
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
如果要映射的兩個對象有完全相同的屬性名,那麼一切都很簡單。
隻需要直接使用Dozer的API即可:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject =
mapper.map(sourceObject, DestinationObject.class);
實際應用,項目需要傳回VO類的資料,但你在mapper中是使用PO類,傳回時需要轉換
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流
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.擷取類的執行個體,通過
類名.成員
擷取執行個體
Mapper announcementDozerMapper = DozerMapperConstant.dozerMapper;
參考文章:
http://www.alliedjeep.com/146242.htm