日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实体类对象修改日志记录

發布時間:2025/4/5 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实体类对象修改日志记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

比較對象類

import org.springframework.beans.BeanUtils;import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method;/*** 對比兩個對象的差值* Created by Administrator on 2018/7/9.*/ public class CompareObejct<T> {private T original; private T current;/**** @param cls* @return*/public String contrastObj(Class<T> cls){StringBuilder sb = new StringBuilder();try{Field[] fields = cls.getDeclaredFields();for(Field field: fields){PropertyDescriptor pd = new PropertyDescriptor(field.getName(),cls);Method getMethod = pd.getReadMethod();String type = field.getType().getName();if(!"java.util.Set".equals(type)){Object o1 = getMethod.invoke(this.original);Object o2 = getMethod.invoke(this.current);if(null != o2){String s1 = o1 == null ? "" :o1.toString();String s2 = o2 == null ? "" :o2.toString();if(!s1.equals(s2)){//System.out.println("不一樣的屬性:" + field.getName() + " 屬性值:[" + s1 + "," + s2 + "]");sb.append(field.getName() + ":" + "[" + s1 + "," + s2 + "];");}}}}}catch (Exception e){e.printStackTrace();}return sb.toString();}public T getOriginal() {return original;}public void setOriginal(T original) {this.original = original;}public T getCurrent() {return current;}public void setCurrent(T current) {this.current = current;} }

  將要修改的值組合成一個新的實體類的JavaBean,得到差異內容后進行復制得到更新后的對象:

/*** 復制對象屬性(對象類型必須相同)** @param orig 資源對象* @param dest 目標對象* @param clazz 源對象類* @param ignoreNull 是否忽略空(true:忽略,false:不忽略)* @param ignoreExist 是否只復制dest值為空的數據 true 是,false 否* @return*/public static <T> T copyProperties(T orig, T dest, Class<?> clazz, boolean ignoreNull,boolean ignoreExist) {if (orig == null || dest == null)return null;if(!clazz.isAssignableFrom(orig.getClass()))return null;Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {try {field.setAccessible(true);Object value = field.get(orig);Object value2 = field.get(dest);System.out.println(field + "----" + value2);if(!java.lang.reflect.Modifier.isFinal(field.getModifiers())){if(!(ignoreNull && value == null)){if(ignoreExist && value2 != null){}else{field.set(dest, value);}}}field.setAccessible(false);} catch (Exception e) {}}if(clazz.getSuperclass() == Object.class){return dest;}return copyProperties(orig, dest, clazz.getSuperclass(), ignoreNull,ignoreExist);}

  調用示例:

/*** * 記錄修改數據的日志* * @Param* * Class<T> c 修改對應的實體類* * T old 修改前的數據* * T update 修改的值(通過JSON轉換為bean)* * @rerturn 返回經過更新后的數據*/@Overridepublic <T> T saveUpdateLog(Class<T> c, T old, T update) {try {TUpdateLog updateLog = new TUpdateLog();CompareObejct<T> compareObejct = new CompareObejct<T>();compareObejct.setOriginal(old);compareObejct.setCurrent(update);String updateContrast = compareObejct.contrastObj(c);if (!JiuyiUtil.isEmpty(updateContrast)) {updateLog.setUpdateContrast(updateContrast);//通過注解獲取tableNameTable annotation = c.getAnnotation(Table.class);String tableName = annotation.name();updateLog.setTableName(tableName);updateLog.setBeforeUpdateEntity(JSON.toJSONString(old));JiuyiUtil.copyProperties(old, update, false, true);updateLog.setAfterUpdateEntity(JSON.toJSONString(update));updateLogDao.save(updateLog);}} catch (Exception e) {e.printStackTrace();}return update;}

  

轉載于:https://www.cnblogs.com/panlongfeng/p/9564072.html

總結

以上是生活随笔為你收集整理的Java实体类对象修改日志记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。