/**
 * 两个相同属性的对象赋值
 *
 * @param sourceObj
 * @param targetObj
 */

public static void entityPropertiesCopy(Object sourceObj, Object targetObj) {
    if (sourceObj == null || targetObj == null)
        return;

    Class targetClass = null;
    //用java反射机制就可以, 可以做成通用的方法, 只要属性名和类型一样
    Field[] sourceFields = null;
    try {
        targetClass = targetObj.getClass();
        sourceFields = sourceObj.getClass().getDeclaredFields();
    } catch (Exception e) {
        e.printStackTrace();
    }

    String fieldName = "";
    Class fieldType = null;

    for (int i = 0; i < sourceFields.length; i++) {
        try {
            fieldName = sourceFields[i].getName();
            fieldType = sourceFields[i].getType();
            Field targetField = targetClass.getDeclaredField(fieldName);
            if (targetField != null && targetField.getType().equals(fieldType)) {
                Method sourceGetter = sourceObj.getClass().getMethod(getGetMethodName(fieldName));
                Method targetSetter = targetObj.getClass().getMethod(getSetMethodName(fieldName), new Class<?>[]{fieldType});
                Object fieldValue = sourceGetter.invoke(sourceObj);
                if (fieldValue != null) {
                    targetSetter.invoke(targetObj, new Object[]{fieldValue});
                }
            }
        } catch (NoSuchFieldException e) {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public static String getGetMethodName(String fieldName) {
    String result = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
    return "get" + result;
}

public static String getSetMethodName(String fieldName) {
    String result = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
    return "set" + result;

}