實體字段比較器(對比兩組對象找出發生變化的字段工具類開發)
支持枚舉映射
支持時間
支持顯示對應字段中文描述
支持嵌套list等場景
下載地址:
Java-對比兩組對象找出發生變化的字段工具-支持枚舉映射-支持時間-支持顯示對應字段中文描述-嵌套list等場景-超越其他工具.rar
最新版本更新
https://code.jiangjiesheng.cn/article/366?from=csdn
package cn.jiangjiesheng.annoation.entitycomparator.demo;import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizentity.SubTask;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizentity.Task;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum1Priority;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum2Status;
import cn.jiangjiesheng.service.impl.common.entitycomparator.demo.bizenum.Enum3Type;
import cn.jiangjiesheng.service.impl.common.entitycomparator.impl.EntityComparator;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** 對比兩組對象找出發生變化的字段工具類 測試驗證*/
public class EntityComparatorDemo {public static void main(String[] args) throws Exception {String dateStr = "2025-03-04 12";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH");// 解析字符串為LocalDateTime對象LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatter);// 如果需要轉換為舊的Date類型Date date = java.sql.Timestamp.valueOf(localDateTime);SubTask oldSubTask = new SubTask("SubTaskOld", date, Enum2Status.PENDING, "2025-01-01");SubTask newSubTask = new SubTask("SubTaskNew", DateUtil.beginOfWeek(new Date()), Enum2Status.COMPLETED, "2025-01-02");List<SubTask> oldSubTasks = new ArrayList<>();oldSubTasks.add(oldSubTask);List<SubTask> newSubTasks = new ArrayList<>();newSubTasks.add(newSubTask);//再來一組,老的是空newSubTasks.add(newSubTask);Task oldTask = new Task(Enum1Priority.LOW, Enum2Status.PENDING, Enum3Type.TYPE_A.getCode(), oldSubTasks, oldSubTask, "2025-01-01");Task newTask = new Task(Enum1Priority.HIGH, Enum2Status.COMPLETED, Enum3Type.TYPE_B.getCode(), newSubTasks, newSubTask, "2025-01-02");List<EntityComparator.ChangeInfo> changes = EntityComparator.compareEntities(oldTask, newTask);// for (ChangeInfo change : changes) {// System.out.println("Field: " + change.getFieldName());// System.out.println("Description: " + change.getFieldDesc());// System.out.println("Old Value: " + change.getOldValue());// System.out.println("New Value: " + change.getNewValue());// System.out.println();// }//這個保持了順序,但是json結構混亂System.out.println("保持了順序,但是json結構混亂:");System.out.println(EntityComparator.ChangeInfo.toOrderedJson(changes));System.out.println();// 這個未保持順序,但是json結構清晰System.out.println("未保持順序,但是json結構清晰:");System.err.println(JSONUtil.toJsonPrettyStr(changes));}
}
對比結果示例:
[ {"fieldDesc" : "任務優先級","fieldName" : "enum1Priority","newValue" : "高優先級","oldValue" : "低優先級"
},{"fieldDesc" : "任務狀態","fieldName" : "enum2Status","newValue" : "已完成","oldValue" : "待處理"
},{"fieldDesc" : "任務類型","fieldName" : "taskType","newValue" : "類型B","oldValue" : "類型A"
},{"child" : [
[ {"fieldName" : "subTasks[0].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[0].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[0].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[0].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"} ],
[ {"fieldName" : "subTasks[1].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[1].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[1].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[1].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"} ],
[ {"fieldName" : "subTasks[2].name","fieldDesc" : "子任務名稱","oldValue" : "","newValue" : "SubTaskNew"},{"fieldName" : "subTasks[2].dateTime","fieldDesc" : "時間日期類型","oldValue" : "","newValue" : "2025-04-07 00"},{"fieldName" : "subTasks[2].enum2Status","fieldDesc" : "子任務狀態","oldValue" : "","newValue" : "已完成"},{"fieldName" : "subTasks[2].createdAt","fieldDesc" : "創建時間","oldValue" : "","newValue" : "2025-01-02"}]],"fieldDesc" : "子任務列表","fieldName" : "subTasks"
},{"fieldDesc" : "子任務名稱","fieldName" : "subTask.name","newValue" : "SubTaskNew","oldValue" : "SubTaskOld"
},{"fieldDesc" : "時間日期類型","fieldName" : "subTask.dateTime","newValue" : "2025-04-07 00","oldValue" : "2025-03-04 12"
},{"fieldDesc" : "子任務狀態","fieldName" : "subTask.enum2Status","newValue" : "已完成","oldValue" : "待處理"
},{"fieldDesc" : "創建時間","fieldName" : "subTask.createdAt","newValue" : "2025-01-02","oldValue" : "2025-01-01"
},{"fieldDesc" : "創建時間","fieldName" : "createdAt","newValue" : "2025-01-02","oldValue" : "2025-01-01"
} ]
最新版本更新
https://code.jiangjiesheng.cn/article/366?from=csdn