`
xiebh
  • 浏览: 612811 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

利用BeanUtils在对象间复制属性

阅读更多
commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:
public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
  throws java.lang.IllegalAccessException,
         java.lang.reflect.InvocationTargetException


如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:
//得到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和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如 Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());



怎么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于前者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而后者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

    * 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

这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。
分享到:
评论

相关推荐

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    如果需要在数据库操作后复制对象,可以在Mapper接口的方法中,或者在Service层中实现对象复制。 总的来说,Java中的对象复制是程序设计中的重要概念,尤其在数据处理和业务逻辑中。理解并熟练掌握浅拷贝和深拷贝的...

    beanutils包

    例如,通过`BeanUtils.copyProperties()`方法,可以方便地将一个对象的属性值复制到另一个对象,极大地提高了代码的可读性和维护性。 2. **类型转换**:BeanUtils库能够自动处理基本数据类型的转换,如将字符串转换...

    BeanUtils工具 .jar 包

    在"java学习笔记——javaweb之BeanUtils、EL、JSTL"这篇博客中,作者可能详细讲解了如何在Java Web开发中利用BeanUtils进行数据绑定,以及与EL(Expression Language)和JSTL(JSP Standard Tag Library)的集成。...

    beanUtils jar 包,还包括source和doc

    // 复制属性 BeanUtils.copyProperties(destUser, srcUser); System.out.println(destUser.getName()); // 输出:John System.out.println(destUser.getAge()); // 输出:30 } } ``` 3. **源码解析** ...

    beanutils-1.8.3开发包

    2. **复制属性**:`BeanUtils.copyProperties()`方法可以将一个对象的所有属性值复制到另一个对象,这在对象克隆或数据迁移场景中非常有用。 3. **异常处理**:BeanUtils库会捕获并包装在访问属性过程中抛出的异常...

    commons-beanutils-1.9.4.jar.zip

    这个库简化了在对象之间复制属性、处理集合以及调用JavaBean方法的过程。在这个"commons-beanutils-1.9.4.jar.zip"压缩包中,包含的核心文件是"commons-beanutils-1.9.4.jar",这是Apache Commons BeanUtils库的...

    java不同对象及集合的多次复制

    在Java编程中,对象复制是一项常见的任务,特别是在处理模型(Model)和视图对象(VO)时。模型对象通常用于封装业务数据,而视图对象则用于展示这些数据。值复制,即对象属性值的复制,是保持数据一致性和简化代码...

    beanutils源码

    3. **复制属性**:`copyProperties()`方法可以将一个对象的属性值复制到另一个对象,这对于数据模型之间的转换非常有用。它会遍历源对象的所有可写属性,并尝试将其值赋给目标对象的同名属性。 4. **空值处理**:...

    beanutils 1.8 jar包+源码_阿锦—小白

    总结来说,Apache Commons BeanUtils 1.8.0是一个强大的Java Bean操作库,它简化了属性的读写操作,提供了对象复制、属性批量设置等高级功能,并且源码开放,有助于开发者提升技能。在Java开发中,尤其是在需要处理...

    commons-beanutils-1.9.2下载

    3. **复制属性**:`copyProperties()`方法可以将一个对象的所有属性复制到另一个对象,这在对象克隆或数据模型映射时非常方便。 4. **反射支持**:BeanUtils利用Java的反射API,动态地处理JavaBean对象,无需预先...

    BeanUtils-jar包

    《BeanUtils-jar包:JavaBean操作的利器》 在Java开发中,BeanUtils-jar包扮演着重要的角色,它是Apache Commons项目...在实际项目中,合理利用BeanUtils-jar包,可以有效地减少重复代码,使程序设计更加简洁和灵活。

    beanutils使用

    在Java开发中,Apache Commons BeanUtils是一个非常实用的工具库,它提供了许多便捷的方法来操作JavaBeans,使得在处理对象属性时变得更加简单。本篇文章将深入探讨如何使用BeanUtils库,特别是通过它将Map对象转换...

    commons-beanutils-1.8.3

    - **数据模型转换**:在业务逻辑层,我们可以利用BeanUtils的复制功能,将DAO层返回的数据对象转换为VO(Value Object)对象,用于视图展示。 - **表单验证**:在进行表单验证时,可以先用BeanUtils填充表单数据,...

    commons-beanutils 源码

    这个库的核心功能在于简化了JavaBean对象的属性设置、获取以及复制等操作,使得开发者能够更加方便地进行数据绑定和对象之间的属性拷贝。在本文中,我们将深入探讨`commons-beanutils-1.6.0`版本的源码,揭示其背后...

    beanutils的jar包

    例如,我们有一个源对象`sourceBean`和目标对象`targetBean`,它们具有相同的属性结构,我们可以使用`BeanUtils.copyProperties()`方法来快速完成两个对象属性的复制: ```java try { BeanUtils.copyProperties...

    Commons BeanUtils 1.8.3 API

    2. **反射操作**:BeanUtils库利用Java的反射API,允许开发者动态地获取和设置Bean的属性,即使在运行时不确定属性名称。 3. **类型转换**:BeanUtils包含了自动类型转换的功能,这意味着即使源属性和目标属性的...

    commons-beanutils

    3. **对象拷贝**:在对象复制或克隆场景下,BeanUtils的`copyProperties()`方法可以避免手动编写重复的代码。 4. **JSON序列化与反序列化**:在与JSON交互时,BeanUtils可配合其他库(如Jackson或Gson)进行对象与...

    commons-beanutils-1.8.2-src官方源文件,是你学习beanutils工具的必备资料

    - **属性复制**:BeanUtils提供`copyProperties()`方法,能将一个Bean的所有属性值复制到另一个Bean,这在对象克隆或数据模型转换时非常有用。 - **类型转换**:BeanUtils具备自动类型转换能力,当设置属性值时,...

    beanutils-1.8.3

    总的来说,Apache Commons BeanUtils 1.8.3版是Java开发中处理JavaBean对象的一种高效工具,提供了方便的属性操作和类型转换功能,源代码的开放使得开发者可以更深入地理解和利用这个库。在使用时,可以结合API文档...

    BeanUtils开发包

    BeanUtils是Apache Commons项目中的一个核心工具包,其主要功能是提供了一系列便捷的方法来操作JavaBean对象,大大简化了在Java编程中对JavaBean属性的设置...在日常开发中,合理利用BeanUtils,可以显著提升开发效率。

Global site tag (gtag.js) - Google Analytics