public static void copyProperties(java.lang.Object dest,java.lang.Object orig) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
//得到TeacherForm TeacherForm teacherForm=(TeacherForm)form; //构造Teacher对象 Teacher teacher=new Teacher(); //赋值 teacher.setName(teacherForm.getName()); teacher.setAge(teacherForm.getAge()); teacher.setGender(teacherForm.getGender()); teacher.setMajor(teacherForm.getMajor()); teacher.setDepartment(teacherForm.getDepartment()); //持久化Teacher对象到数据库 HibernateDAO=; HibernateDAO.save(teacher); 而使用BeanUtils后,代码就大大改观了,如下所示: //得到TeacherForm TeacherForm teacherForm=(TeacherForm)form; //构造Teacher对象 Teacher teacher=new Teacher(); //赋值 BeanUtils.copyProperties(teacher,teacherForm); //持久化Teacher对象到数据库 HibernateDAO=; HibernateDAO.save(teacher);
teacher.setModifyDate(new Date());
* java.lang.BigDecimal * java.lang.BigInteger * boolean and java.lang.Boolean * byte and java.lang.Byte * char and java.lang.Character * java.lang.Class * double and java.lang.Double * float and java.lang.Float * int and java.lang.Integer * long and java.lang.Long * short and java.lang.Short * java.lang.String * java.sql.Date * java.sql.Time * java.sql.Timestamp
BeanUtils.copyProperties(aValue, aLocal)
上面的代码从aLocal对象复制属性到aValue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用了!
现在,还有一个坏消息:使用BeanUtils的成本惊人地昂贵!我做了一个简单的测试,BeanUtils所花费的时间要超过取数据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!
Apache Common BeanUtil是一个常用的在对象之间复制数据的工具类,著名的web开发框架struts就是依赖于它进行ActionForm的创建。
BeanUtil最常用的类是org.apache.commons.beanutils.BeanUtils。
BeanUtils最常用的方法为:
1. public voidcopyProperties
(java.lang.Object dest, java.lang.Object orig)
把orig中的值copy到dest中.
2. public java.util.Map describe(java.lang.Object bean)
把Bean的属性值放入到一个Map里面。
3.
public voidpopulate
(java.lang.Object bean, java.util.Map properties)
把properties里面的值放入bean中。
4. public void setProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
设置Bean对象的名称为name的property的值为value.
5. public String getProperty(java.lang.Object bean, java.lang.String name)
取得bean对象中名为name的属性的值。
详细的使用方法可以参见官方网站:
http://jakarta.apache.org/commons/beanutils/
Apache Common BeanUtil的常见
使用场景
。
<!--[if !supportLists]-->1.
<!--[endif]-->同类之间不同对象要求进行数据复制。
<!--[if !supportLists]-->2.
<!--[endif]-->不同类不同对象之间的数据复制。
相信经常使用struts的人,一定会很熟悉上面的代码。 这是一个典型把页面的value object数据复制到domain object的例子。
<!--[if !supportLists]-->3. <!--[endif]-->对象数据和Map之间互相转化。
Map可以看成一个动态数据容器,作为VO很适合在不同层之间传播数据,作为PO也可以动态存储字段信息, 合理运用可以减少程序很多修改和维护工作。所以让bean和map之间方便的进行数据填充,非常必要。