• 映射实体类属性的map工具类


    package com.akb.hfcx.csp.common.util;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;
    
    public class SuperBeanUtils {
        /**
         * 取Bean的属性和值对应关系的MAP
         * 
         * @param bean
         * @return Map
         */
        public static Map<String, String> getFieldValueMap(Object bean) {
            Class<?> cls = bean.getClass();
            Map<String, String> valueMap = new HashMap<String, String>();
            Method[] methods = cls.getDeclaredMethods();
            Field[] fields = cls.getDeclaredFields();
            for (Field field : fields) {
                try {
                    String fieldType = field.getType().getSimpleName();
                    String fieldGetName = parGetName(field.getName());
                    if (!checkGetMet(methods, fieldGetName)) {
                        continue;
                    }
                    Method fieldGetMet = cls.getMethod(fieldGetName, new Class[] {});
                    Object fieldVal = fieldGetMet.invoke(bean, new Object[] {});
                    String result = null;
                    if ("Date".equals(fieldType)) {
                        result = fmtDate((Date) fieldVal);
                    } else {
                        if (null != fieldVal) {
                            result = String.valueOf(fieldVal);
                        }
                    }
    //                String fieldKeyName = parKeyName(field.getName());
                    valueMap.put(field.getName(), result);
                } catch (Exception e) {
                    continue;
                }
            }
            return valueMap;
        }
     
        /**
         * set属性的值到Bean
         * 
         * @param bean
         * @param valMap
         */
        public static void setFieldValue(Object bean, Map<String, String> valMap) {
            Class<?> cls = bean.getClass();
            // 取出bean里的所有方法
            Method[] methods = cls.getDeclaredMethods();
            Field[] fields = cls.getDeclaredFields();
     
            for (Field field : fields) {
                try {
                    String fieldSetName = parSetName(field.getName());
                    if (!checkSetMet(methods, fieldSetName)) {
                        continue;
                    }
                    Method fieldSetMet = cls.getMethod(fieldSetName,
                            field.getType());
    //                String fieldKeyName = parKeyName(field.getName());
                    String  fieldKeyName = field.getName();
                    String value = valMap.get(fieldKeyName);
                    if (null != value && !"".equals(value)) {
                        String fieldType = field.getType().getSimpleName();
                        if ("String".equals(fieldType)) {
                            fieldSetMet.invoke(bean, value);
                        } else if ("Date".equals(fieldType)) {
                            Date temp = parseDate(value);
                            fieldSetMet.invoke(bean, temp);
                        } else if ("Integer".equals(fieldType)
                                || "int".equals(fieldType)) {
                            Integer intval = Integer.parseInt(value);
                            fieldSetMet.invoke(bean, intval);
                        } else if ("Long".equalsIgnoreCase(fieldType)) {
                            Long temp = Long.parseLong(value);
                            fieldSetMet.invoke(bean, temp);
                        } else if ("Double".equalsIgnoreCase(fieldType)) {
                            Double temp = Double.parseDouble(value);
                            fieldSetMet.invoke(bean, temp);
                        } else if ("Boolean".equalsIgnoreCase(fieldType)) {
                            Boolean temp = Boolean.parseBoolean(value);
                            fieldSetMet.invoke(bean, temp);
                        } else {
                            System.out.println("not supper type" + fieldType);
                        }
                    }
                } catch (Exception e) {
                    continue;
                }
            }
        }
     
        /**
         * 格式化string为Date
         * 
         * @param datestr
         * @return date
         */
        public static Date parseDate(String datestr) {
            if (null == datestr || "".equals(datestr)) {
                return null;
            }
            try {
                String fmtstr = null;
                if (datestr.indexOf(':') > 0) {
                    fmtstr = "yyyy-MM-dd HH:mm:ss";
                } else {
                    fmtstr = "yyyy-MM-dd";
                }
                SimpleDateFormat sdf = new SimpleDateFormat(fmtstr, Locale.UK);
                return sdf.parse(datestr);
            } catch (Exception e) {
                return null;
            }
        }
     
        /**
         * 日期转化为String
         * 
         * @param date
         * @return date string
         */
        public static String fmtDate(Date date) {
            if (null == date) {
                return null;
            }
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                        Locale.US);
                return sdf.format(date);
            } catch (Exception e) {
                return null;
            }
        }
     
        /**
         * 判断是否存在某属性的 set方法
         * 
         * @param methods
         * @param fieldSetMet
         * @return boolean
         */
        public static boolean checkSetMet(Method[] methods, String fieldSetMet) {
            for (Method met : methods) {
                if (fieldSetMet.equals(met.getName())) {
                    return true;
                }
            }
            return false;
        }
     
        /**
         * 判断是否存在某属性的 get方法
         * 
         * @param methods
         * @param fieldGetMet
         * @return boolean
         */
        public static boolean checkGetMet(Method[] methods, String fieldGetMet) {
            for (Method met : methods) {
                if (fieldGetMet.equals(met.getName())) {
                    return true;
                }
            }
            return false;
        }
     
        /**
         * 拼接某属性的 get方法
         * 
         * @param fieldName
         * @return String
         */
        public static String parGetName(String fieldName) {
            if (null == fieldName || "".equals(fieldName)) {
                return null;
            }
            int startIndex = 0;
            if (fieldName.charAt(0) == '_')
                startIndex = 1;
            return "get"
                    + fieldName.substring(startIndex, startIndex + 1).toUpperCase()
                    + fieldName.substring(startIndex + 1);
        }
     
        /**
         * 拼接在某属性的 set方法
         * 
         * @param fieldName
         * @return String
         */
        public static String parSetName(String fieldName) {
            if (null == fieldName || "".equals(fieldName)) {
                return null;
            }
            int startIndex = 0;
            if (fieldName.charAt(0) == '_')
                startIndex = 1;
            return "set"
                    + fieldName.substring(startIndex, startIndex + 1).toUpperCase()
                    + fieldName.substring(startIndex + 1);
        }
     
        /**
         * 获取存储的键名称(调用parGetName)
         * 
         * @param fieldName
         * @return 去掉开头的get
         */
        public static String parKeyName(String fieldName) {
            String fieldGetName = parGetName(fieldName);
            if (fieldGetName != null && fieldGetName.trim() != ""
                    && fieldGetName.length() > 3) {
                return fieldGetName.substring(3);
            }
            return fieldGetName;
        }
    }
  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10688185.html
Copyright © 2020-2023  润新知