Dozer的github地址:https://github.com/DozerMapper/dozer
Dozer的官方文檔:http://dozer.sourceforge.net/
什么是Dozer
Dozer是一個JavaBean映射工具庫星立。
Dozer是Java Bean到Java Bean映射器爽茴,將數(shù)據(jù)從一個對象遞歸到另一個對象,它是一個開放源代碼映射框架绰垂,是強(qiáng)大的室奏,通用的,靈活的劲装,可重用的和可配置的胧沫。
Dozer支持簡單的屬性映射,復(fù)雜類型映射占业,雙向映射绒怨,隱式顯式映射以及遞歸映射。 這包括在元素級別還需要映射的映射集合屬性谦疾。
Dozer不僅支持屬性名稱之間的映射南蹂,而且還可以在類型之間自動轉(zhuǎn)換。 大多數(shù)轉(zhuǎn)換方案都是開箱即用的念恍,但Dozer還允許您通過XML或基于代碼的配置指定自定義轉(zhuǎn)換六剥。
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);
實際應(yīng)用音同,項目需要返回VO類的數(shù)據(jù),但你在mapper中是使用PO類秃嗜,返回時需要轉(zhuǎn)換
Mapper announcementDozerMapper =new DozerBeanMapper();
/**
* @param announcementPo 原PO類的announcement類型
* @return 返回VO類的announcement類型
* @description 將announcement的PO類轉(zhuǎn)化為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類集合轉(zhuǎn)化為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());
}
注:官網(wǎng)著重建議:在現(xiàn)實應(yīng)用中权均,最好不要每次映射對象時都創(chuàng)建一個Mapper實例來工作,這樣會產(chǎn)生不必要的開銷锅锨。如果你不使用IoC容器(如:spring)來管理你的項目叽赊,那么,最好將Mapper定義為單例模式必搞。
如何來定義為單例模式呢必指?
1.創(chuàng)建類的唯一實例,加static變?yōu)轭惖某蓡T
public class DozerMapperConstant {
public static final Mapper dozerMapper = new org.dozer.DozerBeanMapper();
}
2.獲取類的實例,通過類名.成員
獲取實例
Mapper announcementDozerMapper = DozerMapperConstant.dozerMapper;