zoukankan      html  css  js  c++  java
  • 利用java反射机制实现List<Map<String, Object>>转化为List<JavaBean>

    最近在用mybatis做项目,遇到将date格式化显示到easyui的问题,需要将List<Map<String, Object>>转化为List<JavaBean>,研究好久,终于在网上找到了一个方法:

    核心方法如下:

    [java] view plain copy
     
    1. /** 
    2.      * 根据List<Map<String, Object>>数据转换为JavaBean数据 
    3.      * @param datas 
    4.      * @param beanClass 
    5.      * @return 
    6.      * @throws CommonException 
    7.      */  
    8.     public List<T> ListMap2JavaBean(List<Map<String, Object>> datas, Class<T> beanClass) throws CommonException  {  
    9.         // 返回数据集合  
    10.         List<T> list = null;  
    11.         // 对象字段名称  
    12.         String fieldname = "";  
    13.         // 对象方法名称  
    14.         String methodname = "";  
    15.         // 对象方法需要赋的值  
    16.         Object methodsetvalue = "";  
    17.         try {  
    18.             list = new ArrayList<T>();  
    19.             // 得到对象所有字段  
    20.             Field fields[] = beanClass.getDeclaredFields();  
    21.             // 遍历数据  
    22.             for (Map<String, Object> mapdata : datas) {  
    23.                 // 创建一个泛型类型实例  
    24.                 T t = beanClass.newInstance();  
    25.                 // 遍历所有字段,对应配置好的字段并赋值  
    26.                 for (Field field : fields) {  
    27.                     // 获取注解配置  
    28.                     JavaBean javaBean = field.getAnnotation(JavaBean.class);  
    29.                     if(null != javaBean) {  // 有注解配置,下一步操作  
    30.                         // 全部转化为大写  
    31.                         String dbfieldname = javaBean.dbfieldname().toUpperCase();  
    32.                         // 获取字段名称  
    33.                         fieldname = field.getName();  
    34.                         // 拼接set方法  
    35.                         methodname = "set" + StrUtil.capitalize(fieldname);  
    36.                         // 获取data里的对应值  
    37.                         methodsetvalue = mapdata.get(dbfieldname);  
    38.                         // 赋值给字段  
    39.                         Method m = beanClass.getDeclaredMethod(methodname, field.getType());  
    40.                         m.invoke(t, methodsetvalue);  
    41.                     }  
    42.                 }  
    43.                 // 存入返回列表  
    44.                 list.add(t);  
    45.             }  
    46.         } catch (InstantiationException e) {  
    47.             throw new CommonException(e, "创建beanClass实例异常");  
    48.         } catch (IllegalAccessException e) {  
    49.             throw new CommonException(e, "创建beanClass实例异常");  
    50.         } catch (SecurityException e) {  
    51.             throw new CommonException(e, "获取[" + fieldname + "] getter setter 方法异常");  
    52.         } catch (NoSuchMethodException e) {  
    53.             throw new CommonException(e, "获取[" + fieldname + "] getter setter 方法异常");  
    54.         } catch (IllegalArgumentException e) {  
    55.             throw new CommonException(e, "[" + methodname + "] 方法赋值异常");  
    56.         } catch (InvocationTargetException e) {  
    57.             throw new CommonException(e, "[" + methodname + "] 方法赋值异常");  
    58.         }  
    59.         // 返回  
    60.         return list;  
    61.     } 
  • 相关阅读:
    java学习(二)多态中成员变量详解
    java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
    使sublimetext3在ubuntu下可以打中文和在windows的dos命令行下正常显示中文
    解决ubuntu更新中断后报错问题
    [译] 第一天:Bower
    [翻译] 30天学习30种技术
    T-SQL 练习整理
    Your folder can't be shared
    T-SQL PIVOT 基础使用
    SQL SERVER 基础语句学习(三)
  • 原文地址:https://www.cnblogs.com/tanzq/p/8443501.html
Copyright © 2011-2022 走看看