將資料從Java Bean複製到另一個Java Bean
阿新 • • 發佈:2019-02-16
將資料從一個物件複製到另一個物件
使用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));