今天看博客看到一篇文章,谈的是将hibernate查询出来的数据组织到实体中,但他的例子中是按照顺序把值放到实体中,也就是说写的hql的字段顺序得和实体中定义的顺序一致,
于是我就想那要是不一致呢,除了hibernate提供的构造器返回实体的方式,其实我们还可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询返回了多个实体中的字段属性,且这些属性都是我们用到的一个业务类的属性,也可以满足用sql查询出来的结果,也可以在日常开发中用于map转bean,不过这类情况很少。
于是有了下面这一段代码(毕业不到一年,代码写的不是很漂亮至少我这么认为
)
:
private static <T> T map2Bean(T t,Map map) throws Exception{
Class clazz = t.getClass();
//实例化类
T entity = (T)clazz.newInstance();
Set<String> keys = map.keySet();
//变量map 赋值
for(String key:keys){
String fieldName = key;
//判断是sql 还是hql返回的结果
if(key.equals(key.toUpperCase())){
//获取所有域变量
Field[] fields = clazz.getDeclaredFields();
for(Field field: fields){
if(field.getName().toUpperCase().equals(key)) fieldName=field.getName();
break;
}
}
//设置赋值
try {
//参数的类型 clazz.getField(fieldName)
Class<?> paramClass = clazz.getDeclaredField(fieldName).getType();
//拼装set方法名称
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
//根据名称获取方法
Method method = clazz.getMethod(methodName, paramClass);
//调用invoke执行赋值
method.invoke(entity, map.get(key));
} catch (Exception e) {
//NoSuchMethod
}
}
return entity;
}
方法里就是通过反射将与map key值相同的类的属性赋值,有一个地方需要注意,就是clazz.getField(fieldName)与clazz.getDeclaredField(fieldName)的区别,前者是获取类中非private的域变量,而后者包括private,我们大多数情况下用到的都应该是后者,谁也不想把私有的域都排除掉嘛!
其实这里赋值有很多种方法,我们也可以获得域变量,通过
setAccessible方法取消Java语言检查,调用field.set(entity,value)方法直接操作域变量赋值,关于反射之前看过一篇文章写的很好,只是我的经验和水准有限吧,它之后的文章理解起来有些吃力,在这里把地址写下来,大家共同进步。
http://www.iteye.com/topic/1123081
分享到:
相关推荐
java Map转Bean Bean转Map Map排序
总之,Java Map到Bean的转换是通过反射和JavaBeans规范实现的,这是Java开发中常用的一种数据转换技巧。理解并熟练运用这些知识,能够帮助我们更高效地处理各种数据结构,提升代码的灵活性。在实际项目中,可以根据...
// Bean转Map public static Map, Object> beanToMap(Object obj) throws Exception { if (obj == null) { return null; } Map, Object> map = new HashMap(); Class<?> clazz = obj.getClass(); Field[] ...
在Java编程中,Java Bean和Map是两种常用的...总的来说,Java Bean和Map之间的互转在Java开发中非常常见,尤其是在数据交换和视图渲染时。理解并掌握这两种数据结构的转换技巧,有助于提升开发效率和代码的可维护性。
Bean与MAP间互转换的工具类。 1.将一个 Map 对象转化为一个 JavaBean,可指定BEAN的类型; 2.将一个 JavaBean 对象转化为一个 HashMap;
java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...
另一方面,`BeanUtils`类则是用于在Java Bean对象之间进行属性复制,或者将Java Bean转换为Map。这个工具类提供了一系列的方法,如`copyProperties()`,可以将一个Bean的属性值复制到另一个Bean中,实现了对象间的...
本知识点重点讲解将List<Bean>转换为List<Map>的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也会涉及List转换为List及list转换为JsonArray的内容。 ### List<Bean>转换为List<Map> 在...
在Java编程中,Java Bean对象和Map之间的转换是常见的数据操作。这主要涉及到对象属性与键值对之间的映射,方便数据的存储、传递和处理。在这个主题中,我们将深入探讨如何使用Fastjson和BeanMap两个库来实现这种...
Java_Bean2Map,将实体类转化成对应的map的工具类
将list<Map>转换成JavaBean的工具类
通用的Java Bean与Map互转的源代码,方便实用。
2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么全部大写,否则 无法读存BEAN值。 4、bean类boolean属性(Boolean无此要求),前面三个字母...
可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...
public static Map, Object> beanToMap(Object bean) throws IllegalAccessException { Map, Object> map = new HashMap(); Class<?> clazz = bean.getClass(); for (Field field : clazz.getDeclaredFields()) {...
标题和描述中提到的"各种转换,xml,实体bean,动态bean,map等"涉及了Java编程语言中的一些核心概念,这些概念在企业级应用开发中非常常见。下面我们将详细探讨这些知识点。 1. **XML(Extensible Markup Language)*...
Java 实现 Object 和 Map 之间的转换 3 种方式 Java 中,Object 和 Map 是 two kinds of data types 经常需要相互转换的数据类型。以下将介绍 Java 实现 Object 和 Map 之间的转换的 3 种方式。 方式一:使用 ...
在Java编程语言中,`Map`接口是一种非常重要的数据结构,用于存储键值对。它在实际应用中极为广泛,特别是在处理关联数据时。本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### ...
通过引用【opevcsv】依赖,逐行读取数据 并转为Map,Object>格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将文件...
在Java开发中,数据对象(通常称为Bean)之间的转换是一个常见的任务。BeanMapper是一个实用工具,可以帮助我们高效地实现Bean到Bean的深度转换。本文将深入探讨BeanMapper的工作原理、如何使用它以及其背后的源码...