xkbeancomparator - Java bean 对比修改并输出差异的工具


Apache
跨平台
Java

软件简介

xkbeancomparator 是一个 java bean 对比修改并输出差异的工具。

适用场景:用户编辑提交时,需要记录修改内容,修改前后的值对比,生成操作记录;可以选择记录的字段和字段说明,自定义操作记录。

0.依赖 dependency:

<dependency>  
  <groupId>com.github.xkzhangsan</groupId>    
  <artifactId>xkbeancomparator</artifactId>       
  <version>0.0.1</version>    
</dependency>

1.常见用处:

  • 对修改过的对象进行对比生成修改日志;
  • 对比部分字段修改,根据字段注释输出日志。

2.主要功能类和用法:

  • 主要类名称:BeanComparator.java
  • 主要方法为:

    public static String compareBean(Object source, Object target)
    public static CompareResult getCompareResult(Object source, Object target)

3 实例 xkbeancomparator-samples

https://github.com/xkzhangsan/xkbeancomparator-samples

(1)添加pom依赖

<dependency>  
  <groupId>com.github.xkzhangsan</groupId>    
  <artifactId>xkbeancomparator</artifactId>       
  <version>0.0.1</version>    
</dependency>

(2)增加辅助日志类

UserLog

import java.util.HashMap;
import java.util.Map;

import com.xkzhangsan.xkbeancomparator.BeanComparator;
import com.xkzhangsan.xkbeancomparator.CompareResult;

public class UserLog{
   private static final Map<String, String> propertyTranslationMap = new HashMap<>();

   static {
      propertyTranslationMap.put("name", "用户名");
      propertyTranslationMap.put("point", "积分");
   }

   public static CompareResult getCompareResult(Object source, Object target){
      return BeanComparator.getCompareResult(source, target, propertyTranslationMap);
   }
}

(3) 使用

@Test
public void test1() {
    User u1 = new User();
    u1.setId(1);
    u1.setName("aa");
    u1.setPoint(new BigDecimal("111111111111.12"));

    User u2 = new User();
    u2.setId(1);
    u2.setName("aa2");
    u2.setPoint(new BigDecimal("111111111111.15"));
    CompareResult compareResult = UserLog.getCompareResult(u1, u2);
    if (compareResult.isChanged()) {
        System.out.println(compareResult.getChangeContent());
    }
}

(4)说明

上面是推荐用法,使用辅助日志类 UserLog 能统一维护一个 java bean 的注释 map 说明,简化调用。 其中日期格式为:”yyyy-MM-dd
HH🇲🇲ss”