zoukankan      html  css  js  c++  java
  • 利用反射把数据集合转换成List

    ---ResultSet数据集

        public static List toList(ResultSet rs, Class cls) {
            List list = new ArrayList();
            try {
    
                BeanInfo beanInfo = Introspector.getBeanInfo(cls); // 获取类属性
    
                // 给 JavaBean 对象的属性赋值
                PropertyDescriptor[] propertyDescriptors = beanInfo
                        .getPropertyDescriptors();
                ResultSetMetaData meta = rs.getMetaData();
    
                Object obj = null;
                while (rs.next()) {
    
                    obj = cls.newInstance(); // 创建 JavaBean 对象
    
                    for (int j = 1; j <= meta.getColumnCount(); j++) {
    
                        for (int i = 0; i < propertyDescriptors.length; i++) {
                            PropertyDescriptor descriptor = propertyDescriptors[i];
                            String propertyName = descriptor.getName();
    
                            String propertyType = descriptor.getPropertyType()
                                    .getName();
    
                            if (meta.getColumnName(j)
                                    .equalsIgnoreCase(propertyName)) {
    
                                Method method = descriptor.getWriteMethod();
                                Object value = rs.getObject(j);
                                if (propertyType.equals("java.lang.String")
                                        && value == null) {
                                    method.invoke(obj, "");
                                } else if (propertyType.equals("java.lang.String")) {
                                    method.invoke(obj,  value.toString());
                                } else if (propertyType.equals("java.util.Date")) {
                                    method.invoke(obj, (Date) value);
                                } else if (propertyType.equals("java.lang.Integer")) {
                                    method.invoke(obj, new Integer((String) value));
                                } else if (propertyType.equals("float")) {
                                    method.invoke(obj,
                                            Float.parseFloat((String) value));
                                }else if(propertyType.equals("java.math.BigDecimal"))
                                {
                                    method.invoke(obj,(BigDecimal)value);
                                }
                                else {
                                    method.invoke(obj, value);
                                }
                                break;
                            }
                        }
                    }
                    list.add(obj);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                return list;
            }
        }
    }

    ---Map数据集

    public static Object convertMap(Class type, Map map) {
    Object obj = null;
    try {
    
    BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
    obj = type.newInstance(); // 创建 JavaBean 对象
    
    // 给 JavaBean 对象的属性赋值
    PropertyDescriptor[] propertyDescriptors = beanInfo
    .getPropertyDescriptors();
    // 获取key的集合
    Set<String> keySet = map.keySet();// 获取mapKEY
    
    for (int i = 0; i < propertyDescriptors.length; i++) {
    PropertyDescriptor descriptor = propertyDescriptors[i];
    String propertyName = descriptor.getName();
    String strPropertyName = propertyName.toLowerCase();// 大写转小写
    String propertyType=descriptor.getPropertyType().getName();
    // 遍历key集合,获取value
    for (String key : keySet) {
    
    String strKey = key.toLowerCase();
    
    if (strPropertyName.equals(strKey)) {// 对比key与属性是否相同
    // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
    Object value = map.get(key);
    
    /* Object[] args = new Object[1];
    args[0] = value;*/
    
    Method method= descriptor.getWriteMethod();
    if(propertyType.equals("java.lang.String")){ 
    method.invoke(obj,value.toString()); 
    } 
    else if(propertyType.equals("java.util.Date")){ 
    method.invoke(obj, (Date)value); 
    } 
    else if(propertyType.equals("java.lang.Integer")){ 
    method.invoke(obj, new Integer((String)value)); 
    }
    else if(propertyType.equals("float")){ 
    method.invoke(obj, Float.parseFloat((String)value)); 
    } 
    else{ 
    method.invoke(obj, value);
    } 
    break;
    }
    }
    }
    } catch (Exception e) {
    // TODO: handle exception
    logger.error("map转换对象错误", e);
    }
    
    return obj;
    }
    
     
  • 相关阅读:
    【Nginx】url 带有 “https://” 双斜杠特殊处理
    【layui】tepmlet 格式化 table 数据
    于二零二零年:终章
    【Golang】练习-Web 处理 form 表单请求失败不刷新页面并保存输入的数据
    实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)
    面向对象的进阶(item系列,__new__,__hash__,__eq__)
    面向对象阶段复习
    计算器实例
    反射
    静态方法staticmethod和类方法classmethod
  • 原文地址:https://www.cnblogs.com/dashi/p/4260392.html
Copyright © 2011-2022 走看看