比较两个JavaBean对象的不同

比较两个bean的内容

/**
 * 比较两个Bean的内容
 *
 * @param <T>
 * @author zhw
 */
public class ContrastObjUtils<T> {

	public String contrastObj(Object oldBean, Object newBean) {
		String str = "";
		T pojo1 = (T) oldBean;
		T pojo2 = (T) newBean;
		try {
			Class clazz = pojo1.getClass();
			Field[] fields = pojo1.getClass().getDeclaredFields();
			int i = 1;
			for (Field field : fields) {
				if ("serialVersionUID".equals(field.getName())) {
					continue;
				}
				PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
				Method getMethod = pd.getReadMethod();
				Object o1 = getMethod.invoke(pojo1);
				Object o2 = getMethod.invoke(pojo2);
				if (o1 == null || o2 == null) {
					continue;
				}
				if (!o1.toString().equals(o2.toString())) {
					if (i != 1) {
						str += ";  ";
					}
					boolean hasAnnotation = field.isAnnotationPresent((Class<? extends Annotation>) CustomFieldName.class);

					String customFieldValue = "";
					if (hasAnnotation) {
						CustomFieldName customFieldName = field.getAnnotation(CustomFieldName.class);
						customFieldValue = customFieldName.value();
					}
					// 要显示的字段名
					String fieldName = "";
					if (customFieldValue != "") {
						fieldName = customFieldValue;
					} else {
						fieldName = field.getName();
					}

					str += i + "、" + fieldName + ",旧值:" + o1 + ",新值:" + o2;
					i++;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return str;
	}
posted @   Creaky  阅读(2481)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示