Class A{
private String username;
private int id;
private long money;
}
Class B{
private String username;
private int id;
private long money;
private String phone;
private String address;
}
假设,Class A 是对应数据库里的表单的实体类。而 Class B 是我拿到 A 以后,要自己补充了信息的一个类。
请问 怎么操作才能把 A 里的内容放到 B 里面?
BeanUtils.copyProperties(A,B);
用org.springframework.beans.BeanUtils类做对象间的拷贝
第一个参数是源数据, 第二个参数是你接收数据的类
1、简单对象用潜拷贝。
2、复杂对象用深拷贝。
3、实在不会,手动写转换类。
4、想省事就用序列化/反序列化。
package com.cn.darius;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class BeanCopyUitl {
public static void reflectAbeanToBbean(Object class1,Object class2) throws NoSuchMethodException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
// 获取实体类的所有属性,返回Field数组
Field[] field1 = class1.getClass().getDeclaredFields();
Field[] field2 = class2.getClass().getDeclaredFields();
for (int i = 0; i < field1.length; i++) {
// 获取属性的名字
String name = field1[i].getName();
// 将属性的首字符大写,方便构造get,set方法
name = name.substring(0, 1).toUpperCase() + name.substring(1);
Method m1 = class1.getClass().getMethod("get" + name);
// 调用getter方法获取属性值
Object value = m1.invoke(class1);
if (value != null) {
Field f = field2[i];
f.setAccessible(true); //设置些属性是可以访问的
// Object val = f.get(class2);//得到此属性的值
f.set(class2,value) ; //给属性设值
}
}
}
}
上面是util类可以直接复制下来用 下面是测试类
package com.cn.darius;
import java.lang.reflect.InvocationTargetException;
public class Student {
private String name;
private String studentId;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public Student(String name, String studentId) {
super();
this.name = name;
this.studentId = studentId;
}
public static void main(String[] args) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
B b = new B();
BeanCopyUitl.reflectAbeanToBbean(new Student("2","2"), b);
System.out.println(b);
}
}
class B{
private String name;
private String studentId;
private Integer age;
private String grade;
@Override
public String toString() {
return "B [name=" + name + ", studentId=" + studentId + ", age=" + age
+ ", grade=" + grade + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
好用记得采纳哦
给一个Hibernate hql的方法,直接在*hql*里,使用select new
示例:
select new B(username,id,money) from A
注意: B实体类中得有一个参数为空的构造函数
希望帮到你,呵呵,刚发现这么举例,代码里有个new B,不是故意的