码迷,mamicode.com
首页 > 编程语言 > 详细

利用java反射机制实现List<Map<String, Object>>转化为List<JavaBean>

时间:2018-02-12 00:21:31      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:格式化   研究   cep   注解   too   word   遇到   api   核心   

最近在用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反射机制实现List<Map<String, Object>>转化为List<JavaBean>

标签:格式化   研究   cep   注解   too   word   遇到   api   核心   

原文地址:https://www.cnblogs.com/tanzq/p/8443501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!