利用反射,可将Map<String,Object>对象转成真正的实体类。
/**
* 把Map<String,Object>处理成实体类
* @param clazz 想要的实体类
* @param map 包含信息的Map对象
* @return
*/
@SuppressWarnings("unchecked")
public static Object mapToObject(Class clazz, Map<String,Object> map){
if(null == map){
return null;
}
Field[] fields = clazz.getDeclaredFields(); //取到类下所有的属性,也就是变量名
Field field;
Object o = null;
try {
o = clazz.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
for(int i=0; i<fields.length; i++){
field = fields[i];
String fieldName = field.getName();
//把属性的第一个字母处理成大写
String stringLetter=fieldName.substring(0, 1).toUpperCase();
//取得set方法名,比如setBbzt
String setterName="set"+stringLetter+fieldName.substring(1);
//真正取得set方法。
Method setMethod = null;
Class fieldClass = field.getType();
try {
if(isHaveSuchMethod(clazz, setterName)){
if(fieldClass == String.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, String.valueOf(map.get(fieldName)));//为其赋值
}else if(fieldClass == Integer.class || fieldClass == int.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Integer.parseInt(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Boolean.class || fieldClass == boolean.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Boolean.getBoolean(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Short.class || fieldClass == short.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Short.parseShort(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Long.class || fieldClass == long.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Long.parseLong(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Double.class || fieldClass == double.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Double.parseDouble(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Float.class || fieldClass == float.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Float.parseFloat(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == BigInteger.class ){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, BigInteger.valueOf(Long.parseLong(String.valueOf(map.get(fieldName)))));//为其赋值
}else if(fieldClass == BigDecimal.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, BigDecimal.valueOf(Long.parseLong(String.valueOf(map.get(fieldName)))));//为其赋值
}else if(fieldClass == Date.class){
setMethod = clazz.getMethod(setterName, fieldClass);
if(map.get(fieldName).getClass() == java.sql.Date.class){
setMethod.invoke(o, new Date(((java.sql.Date)map.get(fieldName)).getTime()));//为其赋值
}else if(map.get(fieldName).getClass() == java.sql.Time.class){
setMethod.invoke(o, new Date(((java.sql.Time)map.get(fieldName)).getTime()));//为其赋值
}else if(map.get(fieldName).getClass() == java.sql.Timestamp.class){
setMethod.invoke(o, new Date(((java.sql.Timestamp)map.get(fieldName)).getTime()));//为其赋值
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return o;
}
/**
* 判断某个类里是否有某个方法
* @param clazz
* @param methodName
* @return
*/
public static boolean isHaveSuchMethod(Class<?> clazz, String methodName){
Method[] methodArray = clazz.getMethods();
boolean result = false;
if(null != methodArray){
for(int i=0; i<methodArray.length; i++){
if(methodArray[i].getName().equals(methodName)){
result = true;
break;
}
}
}
return result;
}
分享到:
相关推荐
在Java编程中,Map对象和Java实体类是两种常见的数据结构。Map对象通常用于存储键值对,而实体类则代表数据库中的记录或者业务逻辑中的对象。在实际开发中,我们有时需要将Map对象的数据转换为Java实体对象,以便...
`MapUtils`工具类就是为了解决这样的问题而设计的,它简化了`Map`对象和实体类之间的转换过程。本篇文章将深入探讨`MapUtils`工具类的使用及其在Java开发中的重要性。 首先,让我们了解一下实体类。在Java中,实体...
将一个 Map对象转化为JavaBean的形式返回,抛弃一些出现异常的问题与方法,遵循Java开发规范
java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...
总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...
将java实体类转换为map mybatis里用map更方便
Java项目实体类转换实例 在Java项目中,实体类转换是指将一个实体类对象转换为另一个实体类对象的过程。在这种情况下,我们可以使用Dozer库来实现实体类转换。Dozer是一个开源的Java类库,用于将一个Java对象转换...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
在springboot中发起post请求时,需要参数集合,一般参数为我们的实体类中的属性,可以简化业务代码,不用一个一个传参数
这里,`dtoInstance`是Dto对象,`entityInstance`是实体类对象,`Map`方法会根据之前定义的映射规则进行转换。 4. **自定义映射**:在某些情况下,Dto和实体类的属性名称可能不完全匹配,或者需要进行更复杂的转换...
Java实体对象与Map之间的转换是Java开发中的一项常见操作,本文将通过示例代码详细介绍如何实现Java实体对象与Map之间的转换,包括实体类转Map和Map转实体类两种方式。 实体类转Map 在Java开发中,我们经常需要将...
在本文中,我们将深入探讨通用适配器的实现,特别是在使用实体类(Entity Class)和Map数据结构时的情况。我们还将提及如何在Android Studio项目中实现这一功能。 首先,通用适配器(Generic Adapter)是为了处理...
在Java编程中,Pojo(Plain Old Java Object)是一种简单的对象模型,通常用于表示数据实体。Map接口则是Java集合框架的一部分,它提供了键值对的数据存储方式,方便数据的存取。将Pojo对象转换为Map,可以简化数据...
本示例主要介绍如何在MapStruct中自定义类转换,以便处理特定的转换需求。我们将通过分析标题、描述以及提供的代码片段来深入理解这一过程。 首先,MapStruct通过注解驱动的方式,自动为对象间的转换生成源码,极大...
"json 转实体类.zip"这个压缩包包含了一个工具类,目的是将接收到的JSON格式的数据自动转化为Java中的实体类对象。这在实际开发中非常实用,因为它简化了数据处理的步骤,提高了代码的可读性和可维护性。 JSON-lib...
MapStruct这个插件可以用来处理domin实体类与model类的属性映射,可配置性强。 二、MapStruct的优点 MapStruct是一个一直在进步的工具,后面的版本不断改进之前版本的不足,修复之前版本的bug。使用的时候最好最新...
标题和描述中提到的"各种转换,xml,实体bean,动态bean,map等"涉及了Java编程语言中的一些核心概念,这些概念在企业级应用开发中非常常见。下面我们将详细探讨这些知识点。 1. **XML(Extensible Markup Language)*...
MapStruct的主要特点是自动生成映射接口的实现类,不需要手动编写映射逻辑。只需要定义一个Mapper接口,MapStruct就会自动实现这个映射接口,避免了复杂繁琐的映射实现。 在本文中,我们将介绍MapStruct实体转换及...
然而,在某些情况下,我们可能需要将实体类替换为Map类型,以实现更加灵活的数据处理。本文将深入探讨这一转换的过程以及其背后的考量因素。 首先,我们来看看为什么会有将实体类替换为Map的需求。实体类虽然结构...
在Java 8中将List转换为Map对象方法 在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 ...