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 会按照默认的转换规则进行类型的转换,而且不同修饰符的属性也能正常进行映射。