使用xkbeancomparator对比javabean,生成操作记录

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!

原文地址:https://www.cnblogs.com/xkzhangsanx/p/11762063.html

时间: 2024-12-01 18:03:02

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

安卓数据云端同步(一)生成操作Sqlite记录

同步思想: 先介绍客户端为最新数据的数据同步问题,这种机制常常应用在云笔记,随手记类似的app. 这里我建了一个listview,对listview上item的增删改,来代替实际项目中的情况. 1.对listview 和本地数据表datatable表(使用id作为数据唯一表示)映射,实现增删改. 2.每次将对本地数据表的操作记录在operation表中,在表中记录该操作的时间戳. 3.将operation 表中内容封装成json数据发送给服务器(从服务器获取上次同步时间戳,只提交在这次更新以后的

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

(转载)WindowsPhone问题笔记-- 正确选择build action 解决媒体资源无法读取问题 链接:http://www.cnblogs.com/qinxg/archive/2012/07/17/2594503.html 在开发过程中遇到了图片加载器与视频播放器无法正常读取媒体资源的问题. 在代码中 图片路径是正确的,图片无法正常读出.而视频部分采取相同的代码,却可以正常读出. 读取图片代码如下: 读取视频代码如下: (转载)WindowsPhone问题笔记-- 正确选择build

linux下监控用户的操作记录

想知道用户登陆系统后都操作了什么,怎么办? 别急,linux下有一个script工具,专门记录终端会话中所有输入输出结果,并存放到指定文件中. 先看看怎么录制吧! 1.创建日志存放目录 # mkdir /opt/operation_log # chmod 777 -R /opt/operation_log 2.设置用户登陆后自动录制 # vi /etc/profile   #末尾追加一下内容 if [ $UID -ge 500 ]; then    exec script -t 2>/opt/o

squid代理http和https方式上网的操作记录

背景:公司IDC机房有一台服务器A,只有内网环境:192.168.1.150现在需要让这台服务器能对外访问,能正常访问http和https请求(即80端口和443端口) 思路:在IDC机房里另找其他两台有公网环境的服务器B(58.68.250.8/192.168.1.8)和服务器C(58.68.250.5/192.168.1.5),且这两台服务器和内网环境的服务器A能相互ping通.其中:在服务器B上部署squid的http代理,让服务器C通过它的squid代理上网,能成功访问http在服务器C

Oracle EBS 中直发订单Drop Ship流程的系统操作记录

Oracle EBS 中直发订单Drop Ship流程的系统操作记录 应用场景: A公司向客户B销售产品,但是自己不生产该产品,而是向供应商C来采购,并且通常是要供应商C直接把货发到B客户处,属于贸易型企业经常用到的业务流程,有些集团公司下的子公司销售业务也用这种方式. 在实际业务中,并非所有的销售都是企业内部发出的,为了节约成本.提高周转效率.甚至应急销售,企业往往将外部企业也作为自己销售供货的来源之一,通过采购后直接发货的方式,将其他企业的货物直接销往自己的客户.这种销售业务模式,系统中称之

mysql表名等大小写敏感问题、字段类型timestamp、批量修改表名、oracle查询历史操作记录等

mysql表名等大小写敏感问题:http://blog.csdn.net/postnull/article/details/72455768: 1 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 2 1.数据库名与表名是严格区分大小写的: 3 2.表的别名是严格区分大小写的: 4 3.列名与列的别名在所有的情况下均是忽略大小写的: 5 4.字段内容默认情况下是大小写不敏感的. ================================================

SQL Server 审计功能-记录所有的操作记录

SQL Server 审计-记录所有的操作记录 说到审计这个话题,相信作为一个企业管理员都知道,比如一般作为一个AD管理员的话,一般都会通过Policy开启审计功能,记录一些自定义的事务日志.对于SQL Server来说,审计也是一样的,SQL Server审计对象收集单个实例的服务器或数据库级的动作和行为监控组. 审计是在SQL Server实例级. 可以有多个审计/ SQL服务器实例.当你定义一个审计,你指定位置的输出结果. 这是审计目标. 审计是在创建的禁用状态,不会自动审计任何行动. 启

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

Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳理Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录 废话不多说,下面即是使用lvm-snapshot快照方式备份mysql的操作记录,仅依据本人实验中使用而述. 操作记录:如下环

mysql-常用操作记录

之前安装在mysql-hive里写过,这里记录下用到过的命令. 1.查看配置文件:依次查找多个需要查找的文件,结果是所有文件的交集,如果某个参数在多个文件中出现多次,后配置的最终生效 2.可以用以下命令查看当前数据库的全局变量和会话变量 > show global variables; > show session variables; 3.删除所有匿名用户 > drop user ''@'localhost'; 4.给所有的root用户设定密码 第一种方法 > set passw