什么是dozer java,讓我們一起了解一下?
Dozer 是一個(gè)對象轉(zhuǎn)換工具。Dozer可以在JavaBean到JavaBean之間進(jìn)行遞歸數(shù)據(jù)復(fù)制,并且這些JavaBean可以是不同的復(fù)雜的類型。所有的mapping,Dozer將會很直接的將名稱相同的fields進(jìn)行復(fù)制,如果field名不同,或者有特別的對應(yīng)要求,則可以在xml中進(jìn)行定義。
為什么要使用Dozer?
因?yàn)榉治龆鄬蛹軜?gòu)的J2EE系統(tǒng),經(jīng)常存在JavaBean直接的拷貝。比如我們在DAO層,通過Do取得業(yè)務(wù)層需要的數(shù)據(jù),將這些數(shù)據(jù)傳遞給Service層的VO。Do與VO就存在典型的值拷貝。
典型的解決方案就是手動拷貝,代碼中充斥大量Set 和Get方法,真正的業(yè)務(wù)被埋藏值與值的拷貝之中。
另一種方案就是使用BeanUtil,但BeanUtil不夠很好的靈活性,又時(shí)候還不得不手動拷貝。Dozer可以靈活的對對象進(jìn)行轉(zhuǎn)換,且使用簡單。
那么如何讓Dozer自動完成User類到ApiUserDestination類的映射?
1、創(chuàng)建兩個(gè) Java Bean 類:
public?class?User?{ ????private?String?name; ????private?Integer?age; ????private?Date?birthday; ????//?省略?setter?和?getter?方法 }
public?class?UserApiDestinationObject?{ ????private?String?name; ????private?String?age; ????public?String?birthday;
??//?重寫?toString?方法,方便測試 ????@Override ????public?String?toString()?{ ????????return?"UserApiDestinationObject{"?+ ????????????????"name='"?+?name?+?'\''?+ ????????????????",?age='"?+?age?+?'\''?+ ????????????????",?birthday='"?+?birthday?+?'\''?+ ????????????????'}'; ????} ????//?省略?getter、setter?方法 }
2、測試:
@Test public?void?apiTest()?{ ????Mapper?mapper?=?new?DozerBeanMapper(); ????User?user?=?new?User(); ????user.setName("sid10t."); ????user.setAge(3); ????user.setBirthday(new?Date()); ????UserApiDestinationObject?destinationObject?=?mapper.map(user,?UserApiDestinationObject.class); ???? ????System.out.println(destinationObject); }
3、輸出:
UserApiDestinationObject{name='sid10t.',?age='3',?birthday='Tue?Mar?08?10:56:02?CST?2022'}
此時(shí),Dozer 自動完成 User 類到 ApiUserDestination 類的映射。這是 Dozer 的默認(rèn)映射方式——隱式映射,Dozer 自動的將兩個(gè)實(shí)體類的相同屬性名的屬性進(jìn)行映射。如果兩個(gè)屬性的屬性名相同,但是類型不同,Dozer 會按照默認(rèn)的轉(zhuǎn)換規(guī)則進(jìn)行類型的轉(zhuǎn)換,而且不同修飾符的屬性也能正常進(jìn)行映射。
以上就是小編今天的分享了,希望可以幫助到大家。