欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

比较两个bean对象的值是否相等,bean对象相等,import java.

来源: javaer 分享于  点击 27030 次 点评:64

比较两个bean对象的值是否相等,bean对象相等,import java.


import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;public class DomainEquals {    /**     * 日志操作类     */    private static Logger logger = Logger.getLogger(DomainEquals.class);    public DomainEquals() {    }    /**     * 比较两个BEAN或MAP对象的值是否相等      * 如果是BEAN与MAP对象比较时MAP中的key值应与BEAN的属性值名称相同且字段数目要一致     * @param source     * @param target     * @return     */    public static boolean domainEquals(Object source, Object target) {        if (source == null || target == null) {            return false;        }        boolean rv = true;        if (source instanceof Map) {            rv = mapOfSrc(source, target, rv);        } else {            rv = classOfSrc(source, target, rv);        }        logger.info("THE EQUALS RESULT IS " + rv);        return rv;    }    /**     * 源目标为MAP类型时     * @param source     * @param target     * @param rv     * @return     */    private static boolean mapOfSrc(Object source, Object target, boolean rv) {        HashMap<String, String> map = new HashMap<String, String>();        map = (HashMap) source;        for (String key : map.keySet()) {            if (target instanceof Map) {                HashMap<String, String> tarMap = new HashMap<String, String>();                tarMap = (HashMap) target;                if(tarMap.get(key)==null){                    rv = false;                    break;                }                if (!map.get(key).equals(tarMap.get(key))) {                    rv = false;                    break;                }            } else {                String tarValue = getClassValue(target, key) == null ? "" : getClassValue(target, key).toString();                if (!tarValue.equals(map.get(key))) {                    rv = false;                    break;                }            }        }        return rv;    }    /**     * 源目标为非MAP类型时     * @param source     * @param target     * @param rv     * @return     */    private static boolean classOfSrc(Object source, Object target, boolean rv) {        Class<?> srcClass = source.getClass();        Field[] fields = srcClass.getDeclaredFields();        for (Field field : fields) {            String nameKey = field.getName();            if (target instanceof Map) {                HashMap<String, String> tarMap = new HashMap<String, String>();                tarMap = (HashMap) target;                String srcValue = getClassValue(source, nameKey) == null ? "" : getClassValue(source, nameKey)                        .toString();                if(tarMap.get(nameKey)==null){                    rv = false;                    break;                }                if (!tarMap.get(nameKey).equals(srcValue)) {                    rv = false;                    break;                }            } else {                String srcValue = getClassValue(source, nameKey) == null ? "" : getClassValue(source, nameKey)                        .toString();                String tarValue = getClassValue(target, nameKey) == null ? "" : getClassValue(target, nameKey)                        .toString();                if (!srcValue.equals(tarValue)) {                    rv = false;                    break;                }            }        }        return rv;    }    /**     * 根据字段名称取值     * @param obj     * @param fieldName     * @return     */    public static Object getClassValue(Object obj, String fieldName) {        if (obj == null) {            return null;        }        try {            Class beanClass = obj.getClass();            Method[] ms = beanClass.getMethods();            for (int i = 0; i < ms.length; i++) {                // 非get方法不取                if (!ms[i].getName().startsWith("get")) {                    continue;                }                Object objValue = null;                try {                    objValue = ms[i].invoke(obj, new Object[] {});                } catch (Exception e) {                     logger.info("反射取值出错:" + e.toString());                    continue;                }                if (objValue == null) {                    continue;                }                if (ms[i].getName().toUpperCase().equals(fieldName.toUpperCase())                        || ms[i].getName().substring(3).toUpperCase().equals(fieldName.toUpperCase())) {                    return objValue;                } else if (fieldName.toUpperCase().equals("SID")                        && (ms[i].getName().toUpperCase().equals("ID") || ms[i].getName().substring(3).toUpperCase()                                .equals("ID"))) {                    return objValue;                }            }        } catch (Exception e) {            // logger.info("取方法出错!" + e.toString());        }        return null;    }    public static void main(String args[]) {    }}//该片段来自于http://byrx.net
相关栏目:

用户点评