/**
* @author huangzhihua
* @date 2020/11/9*/
public abstract classBase {public abstractLong getId();abstractEnumTableName getTableName();//region 生成数据修改日志
public final static String ADD = "新增";public final static String UPDATE = "更新";public final static String DELETE = "删除";public UnityLog createLog(String unityOperate, T oldObj) throws IllegalAccessException {//保存操作日志
UnityLog unityLog =comparatorObject(unityOperate, oldObj);
unityLog.setId(getId());returnunityLog;
}/**
* 比较新老对象的差别
*
* @param unityOperate
* @param oldObj
* @return
* @throws IllegalAccessException*/
privateUnityLog comparatorObject(String unityOperate, Object oldObj) throws IllegalAccessException {
StringBuilder matter= newStringBuilder();
StringBuilder content= newStringBuilder();if (oldObj != null &&UPDATE.equals(unityOperate)) {
Map oldMap =changeValueToMap(oldObj);
Map newMap = changeValueToMap(this);if (oldMap != null && !oldMap.isEmpty()) {for (Map.Entryentry : oldMap.entrySet()) {
Object oldValue=entry.getValue();
Object newValue= newMap.get(entry.getKey());if (!oldValue.equals(newValue)) {
matter.append("[").append(entry.getKey()).append("]");
content.append("[").append(oldValue).append("->").append(newValue).append("]");
}
}
}
}else{
matter.append("-");
content.append("-");
}returnUnityLog.builder()
.unityOperate(unityOperate)
.unityTag(getTableName().getTableName())
.unityMatter(String.valueOf(matter))
.unityContent(String.valueOf(content))
.build();
}/**
* 将类对象转换成Map
*
* @param entity 原对象
* @return Map
* @throws IllegalAccessException 类型转换时报错*/
private static MapchangeValueToMap(Object entity) throws IllegalAccessException {
Map resultMap = new HashMap<>();
Field[] fields=entity.getClass().getDeclaredFields();for(Field field : fields) {
String name=field.getName();if (PropertyUtils.isReadable(entity, name) &&PropertyUtils.isWriteable(entity, name)) {if (field.isAnnotationPresent(Description.class)) {
Description anno= field.getAnnotation(Description.class);//获取private对象字段值
field.setAccessible(true);
resultMap.put(anno.name(), field.get(entity));
}
}
}returnresultMap;
}
}
该博客介绍了一个Java抽象类`Base`,用于在数据操作(新增、更新、删除)时生成详细的日志,特别是针对更新操作,通过比较新旧对象的差异,记录各个字段的具体变化详情。

1万+

被折叠的 条评论
为什么被折叠?



