利用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反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
随机推荐
- hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别
大家都用过hutool包把,包路径为:cn.hutool.core.util,最近再使用的过程中一直没高明白ObjectUtil.isEmpty和ObjectUtil.isNull两者到底有那些区别, ...
- C++设计模式 - 访问器模式(Visitor)
行为变化模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化."行为变化" 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合. 典型模 ...
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
- 什么是feigin?它的优点是什么?
1.feign采用的是基于接口的注解2.feign整合了ribbon,具有负载均衡的能力3.整合了Hystrix,具有熔断的能力使用:1.添加pom依赖.2.启动类添加@EnableFeignClie ...
- @Param注解和@Mapper注解
@Param 1.如果dao方法中只有一个参数,入参可以为#{0}或者#{任意单词},也可以使用@Param指定参数名称,sql中就只能#{指定名称}获取参数 public List<Regio ...
- 什么是 spring 装配?
当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配.Spring 容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定 在一起,同时装配 b ...
- 常见算法的时间复杂度(大O计数法)
定义 对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率. 对于算法 ...
- 前后端分离项目部署到Linux虚拟机
最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...
- 数据库SQL之学习SUM总和套用条件CASE WHEN语句
1.SQL之学习SUM总和套用条件CASE WHEN语句 2.条件语句CASE WHEN 格式已经在图中写的很明白了 -- 查询t_wzw库中所有数据 总和(条件为t_wzw.birthday > ...
- BMZCTF SDNISC2020_过去和现在
SDNISC2020_过去和现在 打开附件就一张图片 根据题意感觉是图片中隐藏了什么信息 使用binwalk -e分离这里foremost不行 三个文件查看在第一个中发现flag