比較兩個實體類是否一致utils:
import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public class ClassCompareUtil { /** * 比較兩個實體屬性值,返回一個boolean,true則表時兩個對象中的屬性值無差異 * @param oldObject 進行屬性比較的對象1 * @param newObject 進行屬性比較的對象2 * @return 屬性差異比較結果boolean */ public static boolean compareObject(Object oldObject, Object newObject) { Map<String, Map<String,Object>> resultMap=compareFields(oldObject,newObject); if(resultMap.size()>0) { return true; }else { return false; } } /** * 比較兩個實體屬性值,返回一個map以有差異的屬性名為key,value為一個Map分別存oldObject,newObject此屬性名的值 * @param oldObject 進行屬性比較的對象1 * @param newObject 進行屬性比較的對象2 * @return 屬性差異比較結果map */ @SuppressWarnings("rawtypes") public static Map<String, Map<String,Object>> compareFields(Object oldObject, Object newObject) { Map<String, Map<String, Object>> map = null; try{ /** * 只有兩個對象都是同一類型的才有可比性 */ if (oldObject.getClass() == newObject.getClass()) { map = new HashMap<String, Map<String,Object>>(); Class clazz = oldObject.getClass(); //獲取object的所有屬性 PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { //遍歷獲取屬性名 String name = pd.getName(); //獲取屬性的get方法 Method readMethod = pd.getReadMethod(); // 在oldObject上調用get方法等同於獲得oldObject的屬性值 Object oldValue = readMethod.invoke(oldObject); // 在newObject上調用get方法等同於獲得newObject的屬性值 Object newValue = readMethod.invoke(newObject); if(oldValue instanceof List){ continue; } if(newValue instanceof List){ continue; } if(oldValue instanceof Timestamp){ oldValue = new Date(((Timestamp) oldValue).getTime()); } if(newValue instanceof Timestamp){ newValue = new Date(((Timestamp) newValue).getTime()); } if(oldValue == null && newValue == null){ continue; }else if(oldValue == null && newValue != null){ Map<String,Object> valueMap = new HashMap<String,Object>(); valueMap.put("oldValue",oldValue); valueMap.put("newValue",newValue); map.put(name, valueMap); continue; } // 比較這兩個值是否相等,不等就可以放入map了 if (!oldValue.equals(newValue)) { Map<String,Object> valueMap = new HashMap<String,Object>(); valueMap.put("oldValue",oldValue); valueMap.put("newValue",newValue); map.put(name, valueMap); } } } }catch(Exception e){ e.printStackTrace(); } return map; } }