属性少的话,直接set即可。
如果属性多的话,可以考虑使用Apache中的Bean工具包,主要使用 BeanUtils.copyProperties(Object dest,Object orig) 和 PropertyUtils.copyProperties(Object dest,Object orig),原理无非是反射读取到属性列表,然后循环赋值,主要注意的只拷贝dest和orig的相同的名称的字段,比如orig有一个userName属性,dest有一个userName属性,则orig的userName会赋值到dest的userName上。
我看你的给你的例子name赋值到userName这种情况,上面的工具就不适用了,我们简单做一个转化,上面的工具类可以适用。请看例子:
public class Original{
private Integer id;
private String name;
private String desc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "Original [id=" + id + ", name=" + name + ", desc=" + desc + "]";
}
}
public class Dest{
private Integer id;
private String userName;
private String desc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "Dest [id=" + id + ", userName=" + userName + ", desc=" + desc
+ "]";
}
}
import org.apache.commons.beanutils.PropertyUtils;
public class Test {
public static void main(String[] args) throws Exception {
Original o = new Original();
o.setId(7);
o.setName("七夕快乐");
o.setDesc("老婆给我最好的七夕礼物是给我独处的一天");
Dest d = new Dest();
PropertyUtils.copyProperties(d, o);
System.out.println(d);//Dest [id=7, userName=null, desc=老婆给我最好的七夕礼物是给我独处的一天]
}
}
由于d中userName属性和original中的name属性名称不一致,工具也知道怎么映射,这个时候我们在dest类中添加一个public void setName(String userName){this.userName = userName;}方法,
然后打印下就正确了。[id=7, userName=七夕快乐, desc=老婆给我最好的七夕礼物是给我独处的一天]
一般bean直接的拷贝,都是有很多属性名称相同的,稍微几个不同,用上面的方法即可,如果有很多的属性名不同,那可以自己写一个工具类,实现映射配置。