差异值对象
import lombok.Data;
@Data
public class DifferentFieldDTO {
private String fieldName;//字段名
private String fieldText;//字段中文名
private String oldValue;//新值
private String newValue;//旧值
private String status;//add,update,delete,noChange
}
注解类:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckFieldName {
String value() default "";
}
实体类:
import java.math.BigDecimal;
@Data
public class DifferentTestDTO {
@CheckFieldName("字符串")
private String str;
@CheckFieldName("Integer")
private Integer intNum;
@CheckFieldName("BigDecimal")
private BigDecimal bigNum;
}
对比工具:
/**
* 对比两个相同对象之间的值是否相同并返回差异list
* @param t 实体类类型
* @param oldBean
* @param newBean
* @param <T>
* @return
*/
public static <T> List<DifferentFieldDTO> check(T t, Object oldBean, Object newBean) {
T pojo1 = (T) oldBean;
T pojo2 = (T) newBean;
try {
Class clazz = pojo1.getClass();
Field[] fields = pojo1.getClass().getDeclaredFields();
List<DifferentFieldDTO> result = new ArrayList<>();
for (Field field : fields) {
if("serialVersionUID".equals(field.getName())){
continue