话不多说直接上代码
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)); } }运行结果