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

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

特点:

jdk 1.7+

不依赖第三方jar,大小非常小

使用反射,调用get方法对比字段值。

使用实例:xkbeancomparator-samples

(1)添加pom依赖

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

(2)java bean类 User

import java.math.BigDecimal;

public class User {
Integer id;
String name;
private BigDecimal point;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPoint() {
return point;
}
public void setPoint(BigDecimal point) {
this.point = point;
} }

(3)增加辅助日志类 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);
}

}

(4) 使用

@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());
}
}

(5)输出结果

用户名:aa->aa2,积分:111111111111.12->111111111111.15,

(6)说明 instructions

上面是推荐用法,使用辅助日志类能统一维护一个java bean的注释map,简化调用。 The recommended usage, above, is to use secondary logging classes to uniformly maintain an annotated map of a Java bean, simplifying invocation.

欢迎提建议 Suggestions are welcome!

使用xkbeancomparator对比javabean,生成操作记录的更多相关文章

  1. SpringCloud或SpringBoot+Mybatis-Plus利用AOP+mybatis插件实现数据操作记录及更新对比

    引文 本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:AO ...

  2. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  3. Nginx中防盗链(下载防盗链和图片防盗链)及图片访问地址操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  4. 注意 AppResLib.dll.*.mui 的生成操作应该为 Content

    为 Windows Phone 8 App 添加本地化的时候,发现修改 AppResLib.dll.*.mui 后不仅没有其变化,还发现修改它导致它失效.通过对比代码发现,问题原因是 AppResLi ...

  5. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  6. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  7. WP8.1开发中关于媒体(图片)文件的生成操作,属性如何设置(内容/嵌入资源等);

    (转载)WindowsPhone问题笔记-- 正确选择build action 解决媒体资源无法读取问题 链接:http://www.cnblogs.com/qinxg/archive/2012/07 ...

  8. Saltstack自动化操作记录(1)-环境部署【转】

    早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...

  9. Saltstack自动化操作记录(1)-环境部署

    早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...

随机推荐

  1. CMD查看redis

    进入redis安装目录执行 redis-cli.exe -h 127.0.0.1 -p 6379

  2. FCC---Create a More Complex Shape Using CSS and HTML---一个粉色爱心

    One of the most popular shapes in the world is the heart shape, and in this challenge you'll create ...

  3. Python之dict(或对象)与json之间转化

    在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将 ...

  4. iOS滑动手势UIPanGestureRecognizer 注意事项

    今天在做侧滑页面时,发现页面随着滑动手势而滑动,到临界点时,如果再滑动会出现抖动现象.找到解决办法是进入方法后先判断一次,再判断是在滑动范围内让页面滑动.遂将滑动手势(UIPanGestureReco ...

  5. python如何拼接时间戳到写入的文件名中

    问题描述: 记录一下拼接文件名时间戳的过程,回顾下可能的问题所在,希望能帮到同样碰到这类问题的兄dei. 进行单元测试时,最后使用HTMLTestRunner生成的HTML分析报告,需要添加一个时间戳 ...

  6. 元祖,range,字典,结构,fromkeys的使用

    3.5.3 元祖 关键字 tuple tu=(1,2,3,'你好',True) print(tu) 元祖是有序,不可变数据,不能进行修改, 支持索引查看 存储一些比较重要的信息,在配置文件中使用 存放 ...

  7. 关于 from scipy.misc import imread, imresize, imsave 报错的问题

    使用 from scipy.misc import imread, imresize, imsave 时出现报错,查找后发现新版本的Scipy不再包含imread,imresize,imsave,需要 ...

  8. 浅谈js的类数组对象arguments

    类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ...

  9. c# WF 第11节 RichTextBox

    本节内容: 1:RichTextBox的简介: 2:实例 1:RichTextBox的简介: 2:实例 实现实例: 1个RichTextBox  2个label  9 个button 步骤一: 步骤2 ...

  10. [C6] Andrew Ng - Convolutional Neural Networks

    About this Course This course will teach you how to build convolutional neural networks and apply it ...