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的更多相关文章

  1. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  2. 利用JAVA反射机制设计通用的DAO

    利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...

  3. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  4. 利用Java反射机制将Bean转成Map

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  5. 利用java反射机制实现读取excel表格中的数据

    如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...

  6. 利用JAVA反射机制将JSON数据转换成JAVA对象

    net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转 ...

  7. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean

    在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...

  8. 利用java反射机制编写solr通用的java客户端

    一.前言 通过上一篇的讲解,我们知道了dynamicFiled字段,它是动态的,不需要显示的声明.而且一些常用的基本类型solr已经默认给我们创建好了. 例如:*_i,*_is,等. 如果我们要使用动 ...

  9. 利用Java反射机制优化简单工厂设计模式

    之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...

随机推荐

  1. python练习册 每天一个小程序 第0011题

    1 # -*-coding:utf-8-*- 2 3 4 def test(content): 5 flag = 0 6 with open('filtered_words.txt') as fp: ...

  2. 基于JDK的动态代理原理分析

    基于JDK的动态代理原理分析 这篇文章解决三个问题: What 动态代理是什么 How 动态代理怎么用 Why 动态代理的原理 动态代理是什么? 动态代理是代理模式的一种具体实现,是指在程序运行期间, ...

  3. 麒麟系统开发笔记(二):国产麒麟系统搭建Qt开发环境安装Qt5.12

    前言   开发国产应用,使用到银河麒麟V4,V10,本篇以V10记录,参照上一篇可安装V4.V7.V10三个版本,麒麟V4系自带了Qt,麒麟V10没有自带Qt,需要自己编译搭建环境.   银河麒麟V1 ...

  4. MyBatis Plus 2.3 个人笔记-04-配置文件与插件使用

    接入 springboot application.yml配置 1.mapper 扫描 mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/you ...

  5. 外部晶振的使用原因与内部RC振荡器的使用方法 _

    原因一 早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了.这个问题主要还是实用性和成本决定的.   原因二 芯片和晶振的材料是不同的,芯片 (集成电路) 的材料是硅,而晶体则是 ...

  6. 搞懂高并发性能指标:QPS、TPS、RT、吞吐量

      一.QPS,每秒查询 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的 ...

  7. FR9833 32V转5V

  8. Linux网络配置:Nat和桥接模式详解

    Linux网络配置:Nat和桥接模式详解 一.我们首先说一下VMware的几个虚拟设备: Centos虚拟网络编辑器中的虚拟交换机: VMnet0:用于虚拟桥接网络下的虚拟交换机: VMnet1:用于 ...

  9. IDEA 生成返回值对象快捷键Ctrl+Alt+V失效

    在IDEA上运用快捷键返回对象(Ctrl+Alt+V)的时候一直无效,找了很久的问题,发现是有快捷键冲突,发现QQ音乐快捷键与IDEA冲突了,把那处改掉或者关闭即可. 所以边敲代码边听音乐也要注意一下

  10. wx:key报错does not look like a valid key name

    把花括号去掉就行了,  现在改版了,  要注意了     wx:key="index"