我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】

对象比较器

public class LogUtils<T> {

   /**
    * 对象比较器
    * 比较结果eg:1、字段名称loginName,旧值:liu,新值:gu;2、字段名称address,旧值:hunan,新值:neimenggu
    * @param oldBean
    * @param newBean
    * @return
    */
   public String compareObject(Object oldBean, Object newBean) {
      String str = "";

      //if (oldBean instanceof SysConfServer && newBean instanceof SysConfServer) {
      T pojo1 = (T) oldBean;
      T pojo2 = (T) newBean;
      try {
         Class clazz = pojo1.getClass();
         Field[] fields = pojo1.getClass().getDeclaredFields();
         int i = 1;
         for (Field field : fields) {
            if ("serialVersionUID".equals(field.getName())) {
               continue;
            }
            PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
            Method getMethod = pd.getReadMethod();
            Object o1 = getMethod.invoke(pojo1);
            Object o2 = getMethod.invoke(pojo2);
            if (o1 == null || o2 == null) {
               continue;
            }
            if (!o1.toString().equals(o2.toString())) {
               if (i != 1) {
                  str += ";";
               }
               str += i + "、字段名称" + field.getName() + ",旧值:" + o1 + ",新值:" + o2;
               i++;
            }
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
      // }
      return str;
   }

}

原文地址:https://www.cnblogs.com/hujunwei/p/12692213.html

时间: 2024-08-25 01:44:46

我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】的相关文章

使用OpenXml操作Excel,以下方法用于在添加列时修改Cell的CellReference属性。

以下方法实现了递增Excel中单元格的CellReference的功能,只支持两位字母. 1 public static string CellReferenceIncrement(string cellReference) 2 { 3 Match m1 = Regex.Match(cellReference, "^([A-Z]+)"); 4 Match m2 = Regex.Match(cellReference, @"(\d+)$"); 5 6 string v

mysql 添加时间列(用于记录创建时间和修改时间)

在mysql建表的时候需要添加两个时间列,分别记录当前记录的创建时间和修改时间. 好. 下面是建表语句: [sql] view plain copy DROP TABLE IF EXISTS `mytesttable`; CREATE TABLE `mytesttable` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `createtime` datetime DEFAULT CURRENT_TIMESTAMP, `upd

我爱java系列---【自定义注解】

一.注解概述 1.定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类. 接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素 进行说明,注释. 2.作用分类: 编写文档:通过代码里标识的注解生成文档[例如,生成文档doc文档] 代码分析:通过代码里标识的注解对代码进行分析[例如,注解的反射] 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查[例如,Override] 3.常

JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/

/** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] args) { String[] s1 = {"a","b","c","d","e"}; String[] s2 = {"a","b","c",&qu

Java对象比较器对泛型List进行排序-Demo

针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以上类型的查询数据结果,需要对 字段3 进行求和分组(在SQL查询无法一次性完成的情况下,通常采用Java分组排序),大概思路如下: 1.在Bean中添加相关的分组标记字段,对求和或者其它统计的结果进行插入分组标记,下面demo中为bigIdOrder标记 2.对完成标记的List进行标记的补全 3.

Java系列笔记(6) - 并发(上)

目录 1,基本概念 2,volatile 3,atom 4,ThreadLocal 5,CountDownLatch和CyclicBarrier 6,信号量 7,Condition 8,Exchanger 在Java中,JVM.并发.容器.IO/NIO是我认为最重要的知识点,本章将介绍其中的并发,这也是从“会Java”到精通Java所必须经历的一步.本章承接上一张<Java系列笔记(5) - 线程>,其中介绍了Java线程的相关知识,是本章介绍内容的基础,如果对于线程不熟悉的,可以先阅读以下这

Java系列笔记 - JVM监控与调优

光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置.如何监控.如何优化3点上.下面就将针对这3点进行学习. (如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅读本文前,请先阅读我的前一篇博客<Java系列笔记(3) - Java 内存区域和GC机制>,在该博客中,详细叙述了Java HotSpot虚拟机(Sun/Oracle JDK系列默认的虚拟机)的内存分配和垃圾回收机制.

Java系列笔记 - 线程

1,线程原理和概念 当代操作系统,大多数都支持多任务处理.对于多任务的处理,有两个常见的概念:进程和线程.      进程是操作系统分配资源的单位,这里的资源包括CPU.内存.IO.磁盘等等设备,进程之间切换时,操作系统需要分配和回收这些资源,所以其开销相对较大(远大于线程切换):      线程是CPU分配时间的单位,理论上,每个进程至少包含一个线程,每个线程都寄托在一个进程中.一个线程相当于是一个进程在内存中的某个代码段,多个线程在切换时,CPU会根据其优先级和相互关系分配时间片.除时间切换

【JAVA系列】Google爬虫如何抓取JavaScript的?

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]Google爬虫如何抓取JavaScript的? 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 我们测试了谷歌爬虫是如何抓取 JavaScript,下面就是我们从中学习到的知识. 认为 Google 不能处理 JavaScript ?再想想吧.Audette Audette 分享了一系列测试结果,他