比較兩個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;
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM