package com.app.business.utils;import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import flect.Method;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** Created by MJ·J on 2019-11-08*/
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 (Class() == Class()) {map = new HashMap<String, Map<String,Object>>();Class clazz = Class();//获取object的所有属性PropertyDescriptor[] pds = BeanInfo(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;}if (!oldValue.equals(newValue)) {// 比较这两个值是否相等,不等就可以放入map了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;}}
本文发布于:2024-01-30 22:58:07,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662668823445.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |