java 找到实体类model所有修改的属性

业务修改时,经常要比较实体类修改前后的变化记录日志

利用反射快速找到修改前后实体类的变化【需要设置好getter方法】

引用原版:

Class object = Model.class
Method[] methods = object.getMethods();
for(Method one:methods)
{
  String methodName = one.getName();
  if(methodName.indexof("get")==0)
  {
    if(!Objects.equals(one.invoke(oldModel),one.invoke(newModel)))
    {
      String fieldName = methodName.substring(3,4).toLowerCase()+methodName.substring(4);
      System.out.println("field:"+fieldName+" old:"+one.invoke(oldModel)+" new:"+one.invoke(newModel));
    }
  } 
}

修改版:

public class BeanChangeUtil<T> {


    public String contrastObj(Object newModel, Object oldModel) {

        List<String> result = new ArrayList<>();
        try {
            // 转换为传入的泛型T
            T pojo1 = (T) oldModel;
            Class object = pojo1.getClass();
            Method[] methods = object.getMethods();
            for (Method one : methods) {
                String methodName = one.getName();
                if (methodName.indexOf("get") == 0) {
                    Object oldInvoke = one.invoke(oldModel);
                    Object newInvoke = one.invoke(newModel);
                    if (Objects.nonNull(oldInvoke) && Objects.nonNull(newInvoke)) {
                        if ((oldInvoke.equals("") && newInvoke.equals("0")) || (oldInvoke.equals("0") && newInvoke.equals(""))) {
                            continue;
                        }
                    }
                    // null 和 空串""
                    if (Objects.isNull(oldInvoke) && Objects.nonNull(newInvoke) && (newInvoke.equals("") || oldInvoke.equals("0"))) {
                        continue;
                    }
                    if (Objects.isNull(newInvoke) && Objects.nonNull(oldInvoke) && (oldInvoke.equals("") || oldInvoke.equals("0"))) {
                        continue;
                    }
                    if (!Objects.equals(one.invoke(oldModel), one.invoke(newModel))) {
                        String fieldName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
                        result.add(fieldName + "=" + one.invoke(newModel));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result.toString();
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值