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()); } }