dozer java

作者:原创时间:2022-03-21
文档

什么是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自动完成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、测试:

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

此时,Dozer 自动完成 User 类到 ApiUserDestination 类的映射。这是 Dozer 的默认映射方式——隐式映射,Dozer 自动的将两个实体类的相同属性名的属性进行映射。如果两个属性的属性名相同,但是类型不同,Dozer 会按照默认的转换规则进行类型的转换,而且不同修饰符的属性也能正常进行映射。

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
eclipse创建java arrays java awesome java 小程序和app的区别 enum java excel读取java extend java extends java false是java关键字吗 爱奇艺黄金会员和星钻会员的区别 field java foreach java for循环java gateway java gdal java gdb java geohash java geojson java glue java golang调用java double java 微信怎么群发消息给多人 django java continue java 被删的微信聊天记录怎么找回来 compareto java cmake java class转java character java callable java qq实名认证怎么解除 calendar java cache java c#调用java接口 c#调用java brew java boolean java bitset java axis java asterisk java