标签:read scom bean date 遍历 ring style ceo lan
比较两个实体类是否一致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; } }
标签:read scom bean date 遍历 ring style ceo lan
原文地址:https://www.cnblogs.com/wangquanyi/p/12106514.html