如何共享实体类之间的属性比较
如何:如果更改实体类属性的当前更改操作与原始实体类属性值相同,则返回true,并且不需要进行任何更改操作。 相反地进行修正操作
import java.beans.Introspector;
import Java.beans.property descriptor;
import java.lang.reflect.Method;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.data code.bean.standard title.standard title;
公共类公司实用程序{
//*
*比较两个实体的属性值,并返回一个布尔值。 如果为true,则两个对象的属性值没有差异
* @param oldObject属性比较的对象1
* @param newObject属性比较的对象2
* @return属性差异比较结果布尔
*/
publicstaticbooleancompareobject (objectoldobject,Object newObject ) {
mapresultmap=compare fields (old object,newObject,null );
//system.out.println (result map-----result map );
结果映射(if ) (0) ) ) ) ) ) ) )。
返回假;
}else {
返回真;
}
}
@Test
公共void te st01 (
standardtitlest1=newstandardtitle (;
st1.setstandardchinesename (' 123456 );
ST1.setstandardchronology('2);
standardtitlest2=newstandardtitle (;
st2.setstandardchinesename (' 123456 );
ST2.setstandardchronology('2);
system.out.println (compare object (st1,st2 ) );
}
//*
*比较两个实体属性值,返回一个map用不同的属性名称存储key,value在一个map中存储属性名称oldObject,newObject的值
* @param obj1进行属性比较的对象1
* @param obj2进行属性比较的对象2
* @param ignoreArr忽略比较的字段
* @return属性差异比较结果图
*/
@suppresswarnings('rawtypes ) ) ) )。
publicstaticmapcomparefields (objectobj 1,Object obj2,String[] ignoreArr ) {
try{
映射图=new hashmap (;
List ignoreList=null;
if(ignorearr )!=null ignoreArr.length 0) {
//array被转换为列表
ignore list=arrays.as list (ignore arr );
}
if (obj1. getclass (==obj2. getclass ) )//仅当两个对象类型相同时才可进行比较
Class clazz=obj1.getClass (;
获取object的属性描述
property descriptor [ ] PDS=introspect or.getbeaninfo (clazz,
object.class (.getproperty descriptors );
属性描述符3360 PDS (for )//这里是所有属性
String name=pd.getName (; //属性名称
if (登录列表!=nullignorelist.contains(name ) )//如果选择忽略当前属性中的比较,请跳到下一个循环
连续;
}
methodreadmethod=PD.getreadmethod (; //get方法
在//obj1上调用get方法与获取obj1的属性值相同
objecto1=read method.invoke (obj1);
在//obj2上调用get方法与获取obj2的属性值相同
objecto2=read method.invoke (obj2);
if(O1instanceoftimestamp ) {
o1=newdate () (timestamp ) O1 ).getTime );
}
时间表(if ) {
o2=newdate () (timestamp ) O2 ).getTime );
}
if (O1==空O2==空) {
连续;
}elseif(O1==nullO2!=null ) {
List list=new ArrayList (;
list.add(O1;
list.add(O2;
map.put(name,list );
连续;
}
if (! O1.Equals(O2 )//比较这两个值是否相等,可以不等待就放入map
List list=new ArrayList (;
list.add(O1;
list.add(O2;
map.put(name,list );
}
}
}
返回地图;
}catch(exceptione ) {
e .打印任务跟踪(;
返回空值;
}
}
}
如果实体类的属性相同,则返回位true
如果实体类的某些属性不同,则返回false