package com.web.util;
import com.alibaba.fastjson.JSON;
import org.springframework.util.CollectionUtils;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.sql.Timestamp;
import java.util.*;
public class ClassCompareUtil {
public static boolean compareObject(Object oldObject,Object newObject,List<String> ignoreCompareFields){
List<Map<String,Object>> resultMap = compareFields(oldObject,newObject,ignoreCompareFields);
if(resultMap.size()>0){
return false;
}else {
return true;
}
}
public static String changeFields(Object oldObject,Object newObject,List<String> ignoreCompareFields){
return JSON.toJSONString(compareFields(oldObject,newObject,ignoreCompareFields));
}
private static List<Map<String,Object>> compareFields(Object oldObject,Object newObject,List<String> ignoreCompareFields){
List<Map<String,Object>> list = new ArrayList<>();
try {
if (oldObject.getClass()==newObject.getClass()){
Class clazz = oldObject.getClass();
PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors();
for (PropertyDescriptor pd:pds){
String name = pd.getName();
//ignore fields
if (!CollectionUtils.isEmpty(ignoreCompareFields) && ignoreCompareFields.contains(name)){
continue;
}
Method readMethod = pd.getReadMethod();
Object oldValue = readMethod.invoke(oldObject);
Object newValue = readMethod.invoke(newObject);
Map<String,Object> fieldMap = new HashMap<>();
fieldMap.put("fieldName",name);
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){
fieldMap.put("oldValue",oldValue);
fieldMap.put("newValue",newValue);
list.add(fieldMap);
continue;
}
if (!oldValue.equals(newValue)){
fieldMap.put("oldValue",oldValue);
fieldMap.put("newValue",newValue);
list.add(fieldMap );
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
java比较两个实体类的各个属性是否相等
于 2023-03-19 22:49:32 首次发布