将数据从一个对象复制到另一个对象
使用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));
应用场景参考:
http://blog.csdn.net/zhousenshan/article/details/52904084