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

BEGIN;

 

      最近在用hibernate做项目,由于后续的业务功能比较多,然后框架原设计没有使用到一对多、一对一等特性,(艹TA妹)没办法,只能用原生sql语句获得需要的结果集。但是返回过来的是一个List<Map<String, Object>>。如果我们也页面需要展示字段内容,要么就是 get("大写字段名"),要么就是进行一次obj.setxxx(map.get("xxx")),非常的麻烦。如果字段比较多,就吐了。

      本来以为网上有人已经解决过这样的问题,但是没搜到相关的问题,可能是我的搜索能力不行,没办法,自己根据反射写一个简单的操作工具类。

核心方法如下:

 

/**
	 * 根据List<Map<String, Object>>数据转换为JavaBean数据
	 * @param datas
	 * @param beanClass
	 * @return
	 * @throws CommonException
	 */
	public List<T> ListMap2JavaBean(List<Map<String, Object>> datas, Class<T> beanClass) throws CommonException  {
		// 返回数据集合
		List<T> list = null;
		// 对象字段名称
		String fieldname = "";
		// 对象方法名称
		String methodname = "";
		// 对象方法需要赋的值
		Object methodsetvalue = "";
		try {
			list = new ArrayList<T>();
			// 得到对象所有字段
			Field fields[] = beanClass.getDeclaredFields();
			// 遍历数据
			for (Map<String, Object> mapdata : datas) {
				// 创建一个泛型类型实例
				T t = beanClass.newInstance();
				// 遍历所有字段,对应配置好的字段并赋值
				for (Field field : fields) {
					// 获取注解配置
					JavaBean javaBean = field.getAnnotation(JavaBean.class);
					if(null != javaBean) {	// 有注解配置,下一步操作
						// 全部转化为大写
						String dbfieldname = javaBean.dbfieldname().toUpperCase();
						// 获取字段名称
						fieldname = field.getName();
						// 拼接set方法
						methodname = "set" + StrUtil.capitalize(fieldname);
						// 获取data里的对应值
						methodsetvalue = mapdata.get(dbfieldname);
						// 赋值给字段
						Method m = beanClass.getDeclaredMethod(methodname, field.getType());
						m.invoke(t, methodsetvalue);
					}
				}
				// 存入返回列表
				list.add(t);
			}
		} catch (InstantiationException e) {
			throw new CommonException(e, "创建beanClass实例异常");
		} catch (IllegalAccessException e) {
			throw new CommonException(e, "创建beanClass实例异常");
		} catch (SecurityException e) {
			throw new CommonException(e, "获取[" + fieldname + "] getter setter 方法异常");
		} catch (NoSuchMethodException e) {
			throw new CommonException(e, "获取[" + fieldname + "] getter setter 方法异常");
		} catch (IllegalArgumentException e) {
			throw new CommonException(e, "[" + methodname + "] 方法赋值异常");
		} catch (InvocationTargetException e) {
			throw new CommonException(e, "[" + methodname + "] 方法赋值异常");
		}
		// 返回
		return list;
	}


详细的源码下载地址如下:

 

csdn资源下载地址:http://download.csdn.net/detail/cyzshenzhen/5963133

Git@OSC源码托管地址:http://git.oschina.net/cyzshenzhen/JdbcReturnListMap2JavaBean

 

----------------------------------------

--- 现更换项目地址

Git@OSC源码托管地址:http://git.oschina.net/cyzshenzhen/it13-utils-dbutil

com.it13.utils.dbutil.DbBeanUtil.DbBeanUtils 

 

END;

 

 

--- --- --- ---> 点击查看更多最新原创博文<--- --- --- ---

 

技术交流

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值