利用java反射机制实现List>转化为List
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;
--- --- --- ---> 点击查看更多最新原创博文<--- --- --- ---
技术交流

利用java反射机制实现List>转化为List的更多相关文章
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
- 利用JAVA反射机制设计通用的DAO
利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 利用Java反射机制将Bean转成Map
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- 利用java反射机制实现读取excel表格中的数据
如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...
- 利用JAVA反射机制将JSON数据转换成JAVA对象
net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大, 这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用, 有些数据类型需要进行转 ...
- 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean
在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...
- 利用java反射机制编写solr通用的java客户端
一.前言 通过上一篇的讲解,我们知道了dynamicFiled字段,它是动态的,不需要显示的声明.而且一些常用的基本类型solr已经默认给我们创建好了. 例如:*_i,*_is,等. 如果我们要使用动 ...
- 利用Java反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
随机推荐
- Python编写简易木马程序(转载乌云)
Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...
- Java基础 (下)
泛型 Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符? Java 泛型(generics) 是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时 ...
- Elasticsearch 中的节点(比如共 20 个),其中的 10 个 选了一个 master,另外 10 个选了另一个 master,怎么办?
1.当集群 master 候选数量不小于 3 个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题: 2.当 ...
- 为什么 Java 中的 String 是不可变的(Immutable)?
Java 中的 String 不可变是因为 Java 的设计者认为字符串使用非常频繁,将字 符串设置为不可变可以允许多个客户端之间共享相同的字符串.
- Linux 中进程有哪几种状态?在 ps 显示出来的信息中, 分别用什么符号表示的?
1.不可中断状态:进程处于睡眠状态,但是此刻进程是不可中断的.不可中断, 指进程不响应异步信号. 第 441 页 共 485 页2.暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响 ...
- IOC——Spring的bean的管理(xml配置文件)
Bean实例化(三种方式) 1.使用类的无参构造进行创建(大多数情况下) <bean id="user" class="com.bjxb.ioc.User" ...
- PID控制算法的C语言实现
参考: PID控制器开发笔 浅谈位置式PID 专家PID控制在快速系统中的仿真及应用(这篇了论文介绍的积分分离PID.专家PID(脚本实现和simulink实现)很详细) PID控制算法的C语言实现一 ...
- 小程序wx.createInnerAudioContext()获取不到时长问题
最近在开发小程序中,需要用到音频播放功能.但在初始化时,使用InnerAudioContext.duration获取不到音频的时长. Page({ /** * 生命周期函数--监听页面初次渲染完成 * ...
- 【java】密码检查
[问题描述] 开发一个密码检查软件,密码要求: 长度超过8位 包括大小写字母.数字.其它符号,以上四种至少三种 不能有相同长度超2的子串重复 [输入形式] 一组或多组长度超过2的子符串.每组占一行 [ ...
- 面试官:Zookeeper集群怎么搭建?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 作为一名Java拧螺丝选手,不必 ...