java 字段日志_java 实现更新记录时 详细记录各字段的具体更新细节日志

该博客介绍了一个Java抽象类`Base`,用于在数据操作(新增、更新、删除)时生成详细的日志,特别是针对更新操作,通过比较新旧对象的差异,记录各个字段的具体变化详情。
摘要由CSDN通过智能技术生成

/**

* @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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值