java反射的初步使用,利用反射对比,记录数据前后修改的值

没有唠叨。

最近项目中遇到了一个需求:

当某个对象的任何一个属性被修改后,就将这次操作修改前和修改后的值,都记录到操作表中。

无论是哪个对象中的某一个值得到修改后,都要有所记录。

比如:

修改

{realName : "晨翔66" , age : "21", birthday : "2000-06-12"}

修改

{realName : "晨翔啊" , age : "21", birthday : "2002-05-21"}

部分代码解释:

 getDeclaredFields();

用来获取该对象中的所有属性值,包括public、protected、private、default中的字段,但不包括继承字段;

field.setAccessible(true);

// 开启检查是否有权限访问私有变量,如果为false,则不能访问
// 当我们设置的成员变量是私有的,必须要设置为true,否则将不能访问私有的静态变量
// 静态是因为给了序列化静态
Class demo.ClassTest can not access a member of class com.ycx.common.model.user.User with modifiers "private static final"

 getName();用来获取字段名称field.getAnnotation(ApiModelProperty.class).value();// 获取字段名称上的简要描述

   @ApiModelProperty(value = "真实姓名")
    private String realName;

代码: 

  @Test
    public void testUser() throws IllegalAccessException {
        User updateBefore =         
           userDao.selectOne(Wrappers.lambdaQuery(User.class).eq(User::getUid, 214));
        User updateAfter = new User();
        BeanUtils.copyProperties(updateBefore, updateAfter);
         // 修改原来的数据
        updateAfter.setRealName("晨翔啊~");
        updateAfter.setBirthday("2001-06-12");
       
        Field[] fields = User.class.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            Object before = Optional.ofNullable(field.get(updateBefore)).orElse("");
            Object after = Optional.ofNullable(field.get(updateAfter)).orElse("");
            List<Object> list = new ArrayList<>();

            if (!before.equals(after)) {
                JSONObject object = new JSONObject();

                object.put("field", field.getName());// 字段名称
                object.put("fieldRemark",
                field.getAnnotation(ApiModelProperty.class).value());
                object.put("before", before);
                object.put("after", after);
                list.add(object);

            }
        }

    }

 User对象修改前后的记录:

field     --->  字段名称

before --->  查出来的原数据

fieldRemark  --->  字段名称的简要描述

after      --->   修改后的值

[
	[{
		"field": "realName",
		"before": "612晨翔",
		"fieldRemark": "真实姓名",
		"after": "晨翔啊"
	}],  

	[{
		"field": "birthday",
		"before": "1999-06-12",
		"fieldRemark": "生日",
		"after": "2001-06-12"
	}]
]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值