java实体类属性比较_实体类之间属性对比的方法
分享一个实体类之间属性对比的方法
方法用途:对实体类的属性进行修改操作;如果当前修改操作与原先的实体类属性值一样则返回为true,无需进行修改操作;反之则进行修改操作;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
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.datacode.bean.standardtitle.StandardTitle;
public class CompareUtil {
/**
* 比较两个实体属性值,返回一个boolean,true则表时两个对象中的属性值无差异
* @param oldObject 进行属性比较的对象1
* @param newObject 进行属性比较的对象2
* @return 属性差异比较结果boolean
*/
public static boolean compareObject(Object oldObject, Object newObject) {
Map> resultMap=compareFields(oldObject,newObject,null);
//System.out.println("resultMap------------"+resultMap);
if(resultMap.size()>0) {
return false;
}else {
return true;
}
}
@Test
public void test01() {
StandardTitle st1 = new StandardTitle();
st1.setStandardchinesename("123456");
st1.setStandardchronology("2");
StandardTitle st2 = new StandardTitle();
st2.setStandardchinesename("123456");
st2.setStandardchronology("2");
System.out.println(compareObject(st1, st2));
}
/**
* 比较两个实体属性值,返回一个map以有差异的属性名为key,value为一个Map分别存oldObject,newObject此属性名的值
* @param obj1 进行属性比较的对象1
* @param obj2 进行属性比较的对象2
* @param ignoreArr 忽略比较的字段
* @return 属性差异比较结果map
*/
@SuppressWarnings("rawtypes")
public static Map> compareFields(Object obj1, Object obj2, String[] ignoreArr) {
try{
Map> map = new HashMap>();
List ignoreList = null;
if(ignoreArr != null && ignoreArr.length > 0){
// array转化为list
ignoreList = Arrays.asList(ignoreArr);
}
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();// 属性名
if(ignoreList != null && ignoreList.contains(name)){// 如果当前属性选择忽略比较,跳到下一次循环
continue;
}
Method readMethod = pd.getReadMethod();// get方法
// 在obj1上调用get方法等同于获得obj1的属性值
Object o1 = readMethod.invoke(obj1);
// 在obj2上调用get方法等同于获得obj2的属性值
Object o2 = readMethod.invoke(obj2);
if(o1 instanceof Timestamp){
o1 = new Date(((Timestamp) o1).getTime());
}
if(o2 instanceof Timestamp){
o2 = new Date(((Timestamp) o2).getTime());
}
if(o1 == null && o2 == null){
continue;
}else if(o1 == null && o2 != null){
List list = new ArrayList();
list.add(o1);
list.add(o2);
map.put(name, list);
continue;
}
if (!o1.equals(o2)) {// 比较这两个值是否相等,不等就可以放入map了
List list = new ArrayList();
list.add(o1);
list.add(o2);
map.put(name, list);
}
}
}
return map;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
实体类属性相同则返回位true
实体类其中某些属性不同则返回为false
java实体类属性比较_实体类之间属性对比的方法相关推荐
- java 实体建表 注释_实体bean,entity 注解设置
持久化是位于JDBC之上的一个更高层抽象.持久层将对象映射到数据库,以便在查询.装载.更新或删除对象的时候,无须使用像JDBC那样繁琐的API.EJB的早期版本中,持久化是EJB平台的一部分.EJB3 ...
- java派生类属例子_“派生”类属与“相关”类属的辨析
在奥苏贝尔有意义学习理论中下位学习又称类属学习,是指将概括程度或包容范围较低的新概念或命题,归属于认知结构中概括程度或包容范围较高的适当观念中,从而获得新概念或新命题的意义的学习.它可分为两种形式的学 ...
- python类实例覆盖_避免类实例覆盖默认值
我正在处理初始化类的问题.下面是一个复制的例子,突出了潜在的问题(我没有设法使它小得多): 课程 我们有两个类A,B.等级制度A:第一类实例有两个属性link;name ^{cd2>的一个属性是 ...
- 80070583类不存在_原创 | 类应该是匀称和均匀的
当我们采用面向对象的编程语言来设计类的时候,我们设计的大部分类应该是匀称并且均匀的. 类本身应该是匀称的 我们知道,类既有状态,又有行为.在多数面向对象的语言中,状态由类的字段来承载,而行为通过类的方 ...
- a标签download属性无效_使用这些 CSS 属性选择器来提高前端开发效率
如题.但是不要担心,虽然属性选择器非常复杂和强大,但是它们很容易学习和使用.在本文中,我们将讨论它们是如何运行的,并给出一些如何使用它们的想法.通常将 HTML属性放在方括号中,称为属性选择器,如下: ...
- java mvc页面传值方式_详解SpringMVC的ModelAndView传值方法
SpringMVC的ModelAndView传值方法 SpringMVC提供的ModelAndView可以很方便的将后台的值传到前台,前台页面直接使用EL表达式进行获取,获取方式: 1. @Reque ...
- java面向对象高级分层实例_实体类
package bdqn.studentSys.entity; /*** 学生实体类* @author Administrator**/ public class Student {private S ...
- java 数字转化为汉字_工具类_java 数字转化为汉字大写
public class Num2Rmb { private String[] hanArr = { "零", "壹", "贰", &quo ...
- java构造反射和函数_反射类的构造函数和方法
开始学习Javaweb,看到了反射,现在还没有用上,先把基础的写上来吧 package com.april.write; public class Grade { private int num; p ...
- java面向对象高级分层实例_接口类
package bdqn.studentSys.Dao;import java.util.List;import bdqn.studentSys.entity.Student;/*** 学生表的接口* ...
最新文章
- 万字深度好文!视觉-语言(VL)智能:任务、表征学习和大型模型
- html缩进快捷键_HTML 入门笔记
- LeetCode OJ - Populating Next Right Pointers in Each Node II
- sending data mysql slow Mysql查询非常慢的可能原因
- cfree运行程序错误的原因_Python入门教程 | 第 8 章 错误、调试和测试
- 清华图书馆机器人小图_机器人“小图”带你逛“国家图书馆110周年公共数字文化展”...
- mysql 唯一 标识符_mysql – 获取唯一标识符而不插入
- 【work】输出日期为那一年的第几天
- 阶段3 1.Mybatis_11.Mybatis的缓存_4 mybatis一对多实现延迟加载
- java equals() output_Java中的==和equals
- html实例,实现表单
- 是时候复习下 Webpack 了
- 代写品牌故事怎么写才能打动消费者
- 扇贝单词里有计算机英语吗,扇贝单词记录
- 微软android桌面壁纸,微软桌面(com.microsoft.launcher) - 6.210402.0.960830 - 应用 - 酷安
- Microsoft Access 数据库和表
- Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
- Html画组织架构图
- HTML按钮样式,CSS精美按钮
- Android 音频源码分析——音量调节流程
热门文章
- [Django学习] Django基础(8)_富文本编辑器
- WPF:MVVM模式下ViewModel关闭View
- SharePoint 2013 Error - File names can't contain the following characters: ? # {} % ~ / \.
- SQLite介绍及使用
- android rfid 数据解析_基于RFID技术的标签数据完整性与安全性解析
- Spring Boot入门(4)-事务管理
- 计算机将在1分钟重启,Win10开机经常提示将在一分钟后自动重启如何处理
- 云服务器怎么多人进去编辑文档,服务器如何设置多人登陆
- 联想万全服务器告警信息在哪里看,华为网络设备查看告警信息
- 又是整数划分(poj1032)