java Web修改实体类,并记录修改内容。

比较修改前后对象:

//返回一个map以不同的属性名为key,value为一个list分别存obj1,obj2此属性名的值
	public static Map<String,List<Object>> equals(Object obj1,Object obj2) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
	   Map<String,List<Object>> map=new HashMap<String,List<Object>>();
	   if(obj1.getClass()==obj2.getClass()){//只有两个对象都是同一类型的才有可比性
	     Class clazz=obj1.getClass();
	//获取object的属性描述
	     PropertyDescriptor[] pds=Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors();
	     for(PropertyDescriptor pd:pds){//这里就是所有的属性了
	       String name=pd.getName();//属性名
	       Method readMethod=pd.getReadMethod();//get方法
	//在obj1上调用get方法等同于获得obj1的属性值
	       Object o1=readMethod.invoke(obj1);
	//在obj2上调用get方法等同于获得obj2的属性值
	       Object o2=readMethod.invoke(obj2);
	       if(pd.getPropertyType().toString().equals("class java.util.Date")){
	    	   	o1=(DateUtil.DateToString((Date)o1, "yyyy-MM-dd HH:mm:ss"));
	    	   	o2=(DateUtil.DateToString((Date)o2, "yyyy-MM-dd HH:mm:ss"));
	       }
	       if(o1!=null&&o2!=null&&!o1.equals(o2)){//比较这两个值是否相等,不等就可以放入map了
		        List<Object> list=new ArrayList<Object>();
	        	list.add(o1);
	        	list.add(o2);
		        map.put(name,list);
	       }
	     }
	   }
	   return map;
	}

  将比较结果map保存日志表。

时间: 2024-11-05 19:40:23

java Web修改实体类,并记录修改内容。的相关文章

Java中遍历实体类(处理MongoDB)

在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历: 1 //java中遍历实体类,获取属性名和属性值 2 public static void testReflect(Object model) throws Exception{ 3 for (Field field : model.getClass().getDeclaredFields())

grpc proto文件生成java、.net实体类以及客户端代码

背景 工作中对接对方服务是GRPC,对方只提供了proto契约文件,需要自己生成对应的实体类以及客户端代码,故记录下操作流程. Java 代码生成 实体类: 通过protoc插件生成实体类 在 https://github.com/protocolbuffers/protobuf/releases 下载对应版本的protoc工具解压,我这边用的是3.1.0版本的 proto文件拷贝至protoc同目录,执行如下命令: protoc --java_out=./java/ hello.proto 对

Java包装类之实体类不要使用基本类型

[color=rgba(0, 0, 0, 0.75)]今天来记录一下,在项目中因为基本类型,所产生的bug.**U•ェ•*U** 包装类:8种基本类型的包装类 应用场景:数据库建立实体映射多用包装类 这两句话是重点:就是建立实体类禁止使用基本数据量类型!!!而用对应的包装类, 为什么呢,看以下场景. [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <font styl

java中遍历实体类属性和类型

public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ Field[] field = model.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组 for(int j=0 ; j<field

java反射对实体类取值和赋值

项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T> void modelTrim(T model){ Class<T> clazz = (Class<T>) model.getClass(); //获取所有的bean中所有的成员变量 Field[] fields = clazz.getDeclaredFields(); for(

根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程

在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1  哪些知识点可以延后了解 在Java Core方面,下表中的知识点你可以不学习或者到用的时候再学习. 知识点 学习的时机 界面开发方面的知识,比如Swing等 Java主要用在Web方面,很少有项目会用到这些UI部分的知识点.大家可以等实际用到时再学习 Socket编程方面 可以先了解概念,等有项目需求时再学习

在实体类中对与记录数量的属性进行修改时,定义相关方法在实体类中,进行修改时方便

在demo.java中有一个private  Integer count;属性,需要对这个属性进行加一和减一 private Integer count; public Integer getCount() { return count; } public void setCount(int count) { this.count = count; } //对属性加一,先判断是否为null,当创建的是新的对象时,对属性加一就可以先设为0,然后加一,不用在再代码中进行判断 public int a

mybatis generator为实体类生成自定义注释(读取数据库字段的注释添加到实体类,不修改源码)

我们都知道mybatis generator自动生成的注释没什么实际作用,而且还增加了代码量.如果能将注释从数据库中捞取到,不仅能很大程度上增加代码的可读性,而且减少了后期手动加注释的工作量. 1.首先定义注释生成插件 MyCommentGenerator.java package com.ilovey.mybatis.comment; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generato

java Web应用配置log4j日志记录

第一步:首先建立一个WEB工程,去log4j官网下log4j的JAR包导入到工程的lib目录下 第二步:在src目录下建一个log4j.properties 文件,文件命名可以由自己,只是记加载时候和这里名字一致就行: log4j.properties  里边的内容如下: ### set log levels ### log4j.rootLogger = debug,stdout,E log4j.appender.stdout = org.apache.log4j.ConsoleAppender