`

VO与PO之间的转换代码

    博客分类:
  • Java
阅读更多
 
 import  java.beans.PropertyDescriptor;
 import  java.util.Collection;

 import  org.apache.commons.beanutils.PropertyUtils;


 /** 
 * CopyUtil
  */ 
  public   class  CopyUtil   {
    
     /** 
     * Copy properties of orig to dest
     * Exception the Entity and Collection Type
     *  @param  dest
     *  @param  orig
     *  @return  the dest bean
      */ 
      public   static  Object copyProperties(Object dest, Object orig)   {
         if  (dest  ==   null   ||  orig  ==   null )   {
             return  dest;
        } 
        
        PropertyDescriptor[] destDesc  =  PropertyUtils.getPropertyDescriptors(dest);
         try    {
             for  ( int  i  =   0 ; i  <  destDesc.length; i ++ )   {
                Class destType  =  destDesc[i].getPropertyType();
                Class origType  =  PropertyUtils.getPropertyType(orig, destDesc[i].getName());
                 if (destType  !=   null   &&  destType.equals(origType)
                         &&   ! destType.equals(Class. class ))   {
                     if ( ! Collection. class .isAssignableFrom(origType))  {                    
                         try  {
                            Object value  =  PropertyUtils.getProperty(orig, destDesc[i].getName());
                            PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
                        } catch (Exception ex)  {                            
                        } 
                    } 
                } 
            } 
            
             return  dest;
        } catch (Exception ex)   {
             throw   new  CopyException(ex);
 //             return dest; 
         } 
    }     
    
     /** 
     * Copy properties of orig to dest
     * Exception the Entity and Collection Type
     *  @param  dest
     *  @param  orig
     *  @param  ignores 例如:vo.setUserName copy po.setUserName,应该写UserName
     *  @return  the dest bean
      */ 
      public   static  Object copyProperties(Object dest, Object orig, String[] ignores)   {
         if  (dest  ==   null   ||  orig  ==   null )   {
             return  dest;
        } 
        
        PropertyDescriptor[] destDesc  =  PropertyUtils.getPropertyDescriptors(dest);
         try    {
             for  ( int  i  =   0 ; i  <  destDesc.length; i ++ )   {
                 if  (contains(ignores, destDesc[i].getName()))   {
                     continue ;
                } 
                
                Class destType  =  destDesc[i].getPropertyType();
                Class origType  =  PropertyUtils.getPropertyType(orig, destDesc[i].getName());
                 if (destType  !=   null   &&  destType.equals(origType)
                         &&   ! destType.equals(Class. class ))   {
                     if ( ! Collection. class .isAssignableFrom(origType))  {
                        Object value  =  PropertyUtils.getProperty(orig, destDesc[i].getName());
                        PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
                    } 
                } 
            } 
            
             return  dest;
        } catch (Exception ex)   {
             throw   new  CopyException(ex);
        } 
    } 
    
     static   boolean  contains(String[] ignores, String name)   {
         boolean  ignored  =   false ;
         for  ( int  j  =   0 ; ignores  !=   null   &&  j  <  ignores.length; j ++ )   {
             if  (ignores[j].equals(name))   {
                ignored  =   true ;
                 break ;
            } 
        } 
        
         return  ignored;
    } 
} 




public class PO2VO extends TestCase {

    /* (non-Javadoc)
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        super.setUp();
    }
    
    public void testPO2VO(){
        TUserBasicVO vo = new TUserBasicVO();
        TUserBasic po = new TUserBasic();
        po.setPwd("111");
        po.setUserName("222");
        String[] a={"Pwd","UserName"};
        try {
            CopyUtil.copyProperties(vo, po,a);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(vo.getPwd());
    }
}
分享到:
评论
1 楼 letmedown 2012-07-24  
您好!
我有一个问题.
TUserBasicVO vo = new TUserBasicVO();  //业务层的类TUserBasicVO
TUserBasic po = new TUserBasic();    //Hibernate管理的实体类.

请问:
1:当实体类之间有1:m 或m:n关系时,一个po对象的成员变量是另一个po的集合.
您在转换的时候都是把所有的都转换了吗?
2:如果是彻底地转换,那当VO要持久化时,再把它们完全转成PO是吗?
3:您设计的po 与vo类都是面向接口的吗?

请问您是怎么处理的?
谢谢!!

相关推荐

    vopo转换工具类及所需jar

    "vopo转换工具类及所需jar"是一个特定的项目,它提供了一个简单的方法来处理名为"vopo"的数据格式之间的转换。这个工具包可能包含了一些核心的类和依赖的库,使得开发者能够便捷地实现这种转换操作。 首先,`...

    Oracle 自动生成POVO工具

    Oracle 自动化生成POJO(Plain Old Java Object)与VO(Value Object)工具,简称POVO工具,是一种提高开发效率的实用程序。在Java开发中,POJO和VO类经常被用于数据传输和持久化层,它们是业务逻辑和数据模型之间的...

    Java的几种对象(PO-VO-DAO-BO-POJO)解释

    值对象(Value Object,简称VO),通常用于业务层之间的数据传递,与PO类似,它也仅包含数据。但是,VO更倾向于抽象出具体的业务对象,可以根据实际业务需求选择是否与数据库表进行对应。在Web开发中,VO经常被用作...

    VO / DTO / BO / ORM DAO entity DO PO/ POJO(分层领域模型规约)整理

    本文将详细介绍VO (View Object)、DTO (Data Transfer Object)、BO (Business Object)、ORM (Object Relational Mapping)、DAO (Data Access Object)、Entity (实体)、DO (Data Object)、PO (Persistent Object)、...

    java的几种对象(PO_VO_DAO_BO_POJO)解释

    在实体框架或ORM(对象关系映射)工具中,PO对象作为桥梁,将Java对象与数据库记录相互转换,使得开发者能够以面向对象的方式操作数据库数据。 ### 值对象(VO) 值对象(VO)是一种无状态的对象,它代表了一组值...

    java实现相同属性名称及相似类型的pojo、dto、vo等互转操作

    下面是一个简单的示例代码,演示如何使用反射机制来实现 POJO、DTO、VO 等之间的转换: ```java public class PojoConvertUtil { public static &lt;T&gt; T convertPojo(Object orig, Class&lt;T&gt; targetClass) { try { T...

    J2EE架构数据表示:Struts+Hibernate

    ActionFormBean和PO之间的差异在于,ActionFormBean是Web交互的中介,它与HTML表单元素紧密关联,而PO则直接对应数据库记录。在简单应用中,两者可能相似,但在复杂应用中,ActionFormBean只包含与页面交互所需的...

    基于java中的PO VO DAO BO POJO(详解)

    与PO不同的是,VO并不一定与数据库表一一对应,它可以是根据业务需求抽象出来的对象,可能包含多个表的字段或者排除某些字段。 3. DAO(数据访问对象): DAO是用于处理数据库操作的对象,它是数据层的核心组件。...

    java中的缩写

    POJO常被用作VO或BO的基础,它们可以轻易地转换为其他类型的对象,如PO或VO,这使得它们成为构建复杂应用的基石。 ### 关系与应用场景 这些概念并非孤立存在,它们之间存在着紧密的联系和相互转化的过程。例如,PO...

    结合struts和hibernate谈J2EE架构的数据表示.doc

    VO的作用在于封装业务逻辑所需的数据,它可以是由FormBean转化而来,也可以直接由PO转换得到,但其结构应该符合业务规则,而不是简单地复制Web层或持久层的数据结构。在用户查询信息的例子中,VO可能包含一个全名...

    java代码生成器

    Java代码生成器就是为了解决这个问题而设计的,它可以自动生成PO(Plain Old Java Object)、VO(Value Object)、DAO(Data Access Object)和Service层的Java类。 1. PO(Plain Old Java Object):PO对象通常...

    hibernate配置要点详谈

    #### 九、VO与PO转换 - **VO(Value Object)与 PO(Persistent Object)**: - 经过Hibernate容量处理后的VO变成了PO,该VO引用将被容器保存并在`session`关闭时`flush`。 - VO与PO之间的相互转换可以使用`...

    Hibernate使用技巧汇总

    - **转换**: 使用Apache Commons BeanUtils库进行VO与PO之间的属性复制。 #### 十二、Save操作 - **原理**: 如果对象已与Session关联,则无需再次调用`save`,因为`flush`过程会检测并更新变化的对象。 - **延迟...

    hibernate 的各种操作

    // 将 VO 转换为 PO try { tx = session.beginTransaction(); // 开始事务 session.save(po); // 保存实体对象 tx.commit(); // 提交事务 } catch (HibernateException e) { e.printStackTrace(); if ...

    haivDb4J2ee1.3

     5、日期型、数值型变量与Jsp页面交互时需手动转换类型的问题:自动在Form里生成了对应的String变量,用来和Jsp交互。  6、代码可读性问题:代码生成非常规范,注释一应俱全,甚至包括生成时间、开发人员签名等...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    - **POJO 转 PO**:持久化过程中,POJO 通常会被转换为 PO,以便于与数据库交互。 - **POJO 转 DTO**:当需要跨层传输数据时,POJO 可能会被转换为 DTO。 - **POJO 转 VO**:当数据需要展示给用户时,POJO 会被转换...

    基于SOA和ROA的整体技术架构.docx

    - **POJO (Plain Ordinary Java Object)**:简单的Java对象,可以在不同阶段转化为PO、DTO、VO等。 - **PO (Persistant Object)**:对应数据库实体的持久化对象。 - **VO (View Object)**:用于表示层的对象,...

    Hibernate开发指南

    它能够将面向对象的模型与关系型数据库之间的转换自动化,简化了数据访问层的编程工作。在《Hibernate开发指南》中,作者夏昕详细介绍了如何使用Hibernate进行高效的数据操作,涵盖了从基本概念到高级特性的全面内容...

    Java编码辅助工具Mapstruct用法详解

    在项目开发中,业务分层会涉及不同类型的Bean之间需要相互转换,如PO与DTO之间,PO与VO之间等。手动编码setter/getter各个对应属性,会显得臃肿繁琐。通过Mapstruct框架可简单方便地完成这一工作。 如何引入Map...

Global site tag (gtag.js) - Google Analytics