dozer java

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

什麼是dozer java,讓我們一起了解一下?

Dozer 是一個對象轉換工具。Dozer可以在JavaBean到JavaBean之間進行遞歸數據複製,並且這些JavaBean可以是不同的複雜的類型。所有的mapping,Dozer將會很直接的將名稱相同的fields進行復制,如果field名不同,或者有特別的對應要求,則可以在xml中進行定義。

爲什麼要使用Dozer?

因爲分析多層架構的J2EE系統,經常存在JavaBean直接的拷貝。比如我們在DAO層,透過Do取得業務層需要的數據,將這些數據傳遞給Service層的VO。Do與VO就存在典型的值拷貝。

典型的解決方案就是手動拷貝,代碼中充斥大量Set 和Get方法,真正的業務被埋藏值與值的拷貝之中。

另一種方案就是使用BeanUtil,但BeanUtil不夠很好的靈活性,又時候還不得不手動拷貝。Dozer可以靈活的對對象進行轉換,且使用簡單。

dozer java

那麼如何讓Dozer自動完成User類到ApiUserDestination類的映射?

1、創建兩個 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、測試:

@Testpublic 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'}

此時,Dozer 自動完成 User 類到 ApiUserDestination 類的映射。這是 Dozer 的默認映射方式——隱式映射,Dozer 自動的將兩個實體類的相同屬性名的屬性進行映射。如果兩個屬性的屬性名相同,但是類型不同,Dozer 會按照默認的轉換規則進行類型的轉換,而且不同修飾符的屬性也能正常進行映射。