package com.bcxin.signature.util; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.beanutils.ConvertUtils; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Timestamp; import java.util.*; /** * 瀵硅薄鎿嶄綔宸ュ叿绫�, 缁ф壙org.apache.commons.beanutils.BeanUtils绫� * * @author zhangye * @version 1.0 */ public class ObjectUtils extends BeanUtils { static { //娉ㄥ唽sql.date鐨勮浆鎹㈠櫒锛屽厑璁窧eanUtils.copyProperties鏃秙ql.Date绫诲瀷鐨勫€煎厑璁镐负绌� ConvertUtils.register(new org.apache.commons.beanutils.converters.SqlDateConverter(null), java.sql.Date.class); //娉ㄥ唽util.date鐨勮浆鎹㈠櫒锛屽厑璁窧eanUtils.copyProperties鏃秛til.Date绫诲瀷鐨勫€煎厑璁镐负绌� ConvertUtils.register(new org.apache.commons.beanutils.converters.SqlDateConverter(null), Date.class); } /** * @Author: wangcy * @Description: dest 瑕乧opy鐨勫璞� 锛宱rig鏄痗opy鍐呭鐨勬潵婧� * @Date: 2017/12/27 0027 10:57 */ public static void copyProperties(Object dest, Object orig) { try { BeanUtilsBean.getInstance().copyProperties(dest, orig); } catch (Exception e) { e.printStackTrace(); } } /** * @Author: wangjianchi * @Description: dest 瑕乧opy鐨勫璞� 锛宱rig鏄痗opy鍐呭鐨勬潵婧� 鎷疯礉绯荤粺鍒濆鍖栨墍闇€甯搁噺 * @Date: 2018/01/22 0027 10:57 */ public static void appCopyProperties(Object dest, Object orig) { try { Map<String, Object> sourceMap = new HashMap<String, Object>(); Field[] origFields = getAllFields(orig); for (Field file : origFields) { file.setAccessible(true); String fileName = file.getName(); if (fileName.equals("createBy")) { sourceMap.put("createBy", file.get(orig)); } else if (fileName.equals("createTime")) { sourceMap.put("createTime", file.get(orig)); } else if (fileName.equals("updateBy")) { sourceMap.put("updateBy", file.get(orig)); } else if (fileName.equals("updateTime")) { sourceMap.put("updateTime", file.get(orig)); } else if (fileName.equals("isDelete")) { sourceMap.put("isDelete", file.get(orig)); } else if (fileName.equals("comId")) { sourceMap.put("comId", file.get(orig)); } else if (fileName.equals("sessionId")) { sourceMap.put("sessionId", file.get(orig)); } } Field[] destFields = getAllFields(dest); { for (Field file : destFields) { file.setAccessible(true); String fileName = file.getName(); if (fileName.equals("createBy")) { file.set(dest, sourceMap.get(fileName)); } else if (fileName.equals("createTime")) { file.set(dest, sourceMap.get(fileName)); } else if (fileName.equals("updateBy")) { file.set(dest, sourceMap.get(fileName)); } else if (fileName.equals("updateTime")) { file.set(dest, sourceMap.get(fileName)); } else if (fileName.equals("isDelete")) { file.set(dest, sourceMap.get(fileName)); } else if (fileName.equals("comId")) { file.set(dest, sourceMap.get(fileName)); }else if (fileName.equals("sessionId")) { file.set(dest, sourceMap.get(fileName)); } } } } catch (Exception e) { e.printStackTrace(); } } public static Field[] getAllFields(Object object) { Class clazz = object.getClass(); List<Field> fieldList = new ArrayList<>(); while (clazz != null) { fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); clazz = clazz.getSuperclass(); } Field[] fields = new Field[fieldList.size()]; fieldList.toArray(fields); return fields; } public static <T> Map<String, String> compare(T obj1, T Obj2) throws Exception { Map<String, String> result = new HashMap<String, String>(); Field[] fs = obj1.getClass().getDeclaredFields(); for (Field f : fs) { f.setAccessible(true); Object v1 = f.get(obj1); Object v2 = f.get(Obj2); result.put(f.getName(), String.valueOf(equals(v1, v2))); } return result; } public static boolean equals(Object obj1, Object obj2) { if (obj1 == obj2) { return true; } if (obj1 == null || obj2 == null) { return false; } return obj1.equals(obj2); } /** * 姣旇緝涓や釜瀹炰綋灞炴€у€硷紝杩斿洖涓€涓猰ap浠ユ湁宸紓鐨勫睘鎬у悕涓簁ey锛寁alue涓轰竴涓猯ist鍒嗗埆瀛榦bj1,obj2姝ゅ睘鎬у悕鐨勫€� * * @param obj1 * 杩涜灞炴€ф瘮杈冪殑瀵硅薄1 * @param obj2 * 杩涜灞炴€ф瘮杈冪殑瀵硅薄2() * @param ignoreArr * 閫夋嫨蹇界暐姣旇緝鐨勫睘鎬ф暟缁� * @return 灞炴€у樊寮傛瘮杈冪粨鏋渕ap * @Author: wangcy */ public static Map<String, List<Object>> compareFields(Object obj1, Object obj2, String[] ignoreArr) { try { Map<String, List<Object>> map = new HashMap<String, List<Object>>(); List<String> ignoreList = null; if (ignoreArr != null && ignoreArr.length > 0) { // array杞寲涓簂ist 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鏂规硶 // 鍦╫bj1涓婅皟鐢╣et鏂规硶绛夊悓浜庤幏寰梠bj1鐨勫睘鎬у€� Object o1 = readMethod.invoke(obj1); // 鍦╫bj2涓婅皟鐢╣et鏂规硶绛夊悓浜庤幏寰梠bj2鐨勫睘鎬у€� 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<Object> list = new ArrayList<Object>(); list.add(o1); list.add(o2); map.put(name, list); continue; } if (!o1.equals(o2)) {// 姣旇緝杩欎袱涓€兼槸鍚︾浉绛�,涓嶇瓑灏卞彲浠ユ斁鍏ap浜� List<Object> list = new ArrayList<Object>(); list.add(o1); list.add(o2); map.put(name, list); } } } return map; } catch (Exception e) { e.printStackTrace(); return null; } } public static String safeToString(Object object){ if (object == null) { return ""; } return object.toString(); } }