不同实体类相同属性赋值,复制对象里的值到另一个对象里的工具类

方法:

//不同实体类相同属性赋值,只复制有get,set方法的属性,默认不忽略空字符串,加参数true后忽略
    public static void attrCopy(Object objFrom,Object objTo,String key,Boolean... args){     	
        Class clsFrom=null;
        Class clsTo=null;
		try {
			clsFrom = Class.forName(objFrom.getClass().getName());
			clsTo = Class.forName(objTo.getClass().getName()); 
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}           
        //获取两个实体类的所有属性  
        Field[] objFromFields = clsFrom.getDeclaredFields();  
        Field[] objToFields = clsTo.getDeclaredFields(); 
        boolean ignoreEmpty=false;
        //遍历赋值
        for (Field formField : objFromFields) {  
        	//如果是属性id不赋值
            if(formField.getName().equals(key))  
                continue;  
            Object value = invokeGetMethod(objFrom ,formField.getName());
            //如果是null不赋值
            if (value!=null) {            	
            	for (Boolean bl : args) {
					if (bl) {
						ignoreEmpty=true;//忽略空字符串
						break;
					}
				}
            	//如果是空字符串不赋值
            	if (ignoreEmpty) {
            		if (value instanceof String) {
    					String string=(String)value;
    					if (string.trim().length() == 0) {
    						continue;
    					}
    				}
				}            	
            	for (Field toField : objToFields) { 
            		//找相同的属性
                    if(formField.getName().equals(toField.getName())){  
                        Object[] obj = new Object[1];  
                        obj[0] = value;  
                        invokeSetMethod(objTo, toField.getName(), obj);  
                        break;
                    }  
                }  
			}            
        }            
    }  

如何调用:

    object1; //复制的对象

    object2;//粘贴的对象

    attrCopy(object1, object2, "主键Id");

猜你喜欢

转载自blog.csdn.net/zengguanlin/article/details/79358857