1. 代码
话不多说直接上代码
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 比较实体类前后差异返回差异字段和内容
*
* @author lhn
* @createDate 2020/09/03 10:51
*/
public class BeanCompareUtils<T> {
public String contrastObj(Object oldBean, Object newBean) {
String str="";
//if (oldBean instanceof SysConfServer && newBean instanceof SysConfServer) {
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+=";";
}
str+=i+"、字段名称"+field.getName()+",旧值:"+o1+",新值:"+o2;
i++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
// }
return str;
}
public static void main(String[] args) {
BeanCompareUtils beanCompareUtils = new BeanCompareUtils();
MebUserDto mebUserDto = new MebUserDto();
mebUserDto.setParkUserId("1");
mebUserDto.setMobileNumber("18851815112");
mebUserDto.setUserStatus(1);
MebUserDto mebUserDto1 = new MebUserDto();
mebUserDto1.setParkUserId("2");
mebUserDto1.setMobileNumber("18851815112");
mebUserDto1.setUserStatus(2);
System.out.println(beanCompareUtils.contrastObj(mebUserDto,mebUserDto1));
}
}
运行结果