1. 程式人生 > >將資料從Java Bean複製到另一個Java Bean

將資料從Java Bean複製到另一個Java Bean

將資料從一個物件複製到另一個物件

使用Spring的BeanUtils

在開發中我們常會在物件之間設定屬性值:

Order order = new Order();
order.setOrderAmount(orderDTO.getOrderAmount());
order.setOrderStatus(orderDTO.getOrderStatus());
order.setPayStatus(orderDTO.getPayStatus());

而使用Spring的
org.springframework.beans.BeanUtils類後,只需要一行程式碼即可將orderDTO

物件的屬性值賦值給order物件中對應的屬性:

BeanUtils.copyProperties(orderDTO, order);

以上賦值操作僅支援兩個物件屬性相同的情況。

使用Dozer

上一節的賦值操作方式僅支援兩個物件屬性相同的情況。

如果需要對複雜物件進行賦值或兩個物件屬性不相同的情況賦值,推薦使用Dozer庫。

需要引入:

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-core</artifactId
>
<version>6.2.0-SNAPSHOT</version> </dependency>

通過xml配置檔案

<mapping>
  <class-a>yourpackage.SourceClassName</class-a>
  <class-b>yourpackage.DestinationClassName</class-b>
    <field>
      <A>yourSourceFieldName</A>
      <B
>
yourDestinationFieldName</B> </field> </mapping>

通過註解

public class SourceBean {

    private Long id;

    private String name;

    @Mapping("binaryData")
    private String data;

    @Mapping("pk")
    public Long getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }
}
public class TargetBean {

    private String pk;

    private String name;

    private String binaryData;

    public void setPk(String pk) {
        this.pk = pk;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然後

SourceClassName sourceObject = ...

Mapper mapper = DozerBeanMapperBuilder.buildDefault();
DestinationObject destObject = mapper.map(sourceObject, DestinationClassName.class);

assertTrue(destObject.getYourDestinationFieldName().equals(sourceObject.getYourSourceFieldName));