利用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.     } 

转载于:https://www.cnblogs.com/tanzq/p/8443501.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值