`
xticfc
  • 浏览: 21723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

map转实体类

阅读更多
利用反射,可将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;
	}
分享到:
评论

相关推荐

    将Map转换成Java实体

    在Java编程中,Map对象和Java实体类是两种常见的数据结构。Map对象通常用于存储键值对,而实体类则代表数据库中的记录或者业务逻辑中的对象。在实际开发中,我们有时需要将Map对象的数据转换为Java实体对象,以便...

    MapUtils工具类,轻松转换map数据与实体类

    `MapUtils`工具类就是为了解决这样的问题而设计的,它简化了`Map`对象和实体类之间的转换过程。本篇文章将深入探讨`MapUtils`工具类的使用及其在Java开发中的重要性。 首先,让我们了解一下实体类。在Java中,实体...

    map转Java实体类

    将一个 Map对象转化为JavaBean的形式返回,抛弃一些出现异常的问题与方法,遵循Java开发规范

    java map转实体

    java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...

    任意XML转实体类 实体类 转XML 方法 JAVA

    总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...

    java实体转map工具类

    将java实体类转换为map mybatis里用map更方便

    java项目实体类转换实例

    Java项目实体类转换实例 在Java项目中,实体类转换是指将一个实体类对象转换为另一个实体类对象的过程。在这种情况下,我们可以使用Dozer库来实现实体类转换。Dozer是一个开源的Java类库,用于将一个Java对象转换...

    基于java8新特性+反射机制实现list不同实体类互转.zip

    这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...

    实体类转换为指定类型MAP

    在springboot中发起post请求时,需要参数集合,一般参数为我们的实体类中的属性,可以简化业务代码,不用一个一个传参数

    Dto转实体类 AutoMapper

    这里,`dtoInstance`是Dto对象,`entityInstance`是实体类对象,`Map`方法会根据之前定义的映射规则进行转换。 4. **自定义映射**:在某些情况下,Dto和实体类的属性名称可能不完全匹配,或者需要进行更复杂的转换...

    java实体对象与Map之间的转换工具类代码实例

    Java实体对象与Map之间的转换是Java开发中的一项常见操作,本文将通过示例代码详细介绍如何实现Java实体对象与Map之间的转换,包括实体类转Map和Map转实体类两种方式。 实体类转Map 在Java开发中,我们经常需要将...

    通用适配器(实体类+map)

    在本文中,我们将深入探讨通用适配器的实现,特别是在使用实体类(Entity Class)和Map数据结构时的情况。我们还将提及如何在Android Studio项目中实现这一功能。 首先,通用适配器(Generic Adapter)是为了处理...

    java Pojo转Map

    在Java编程中,Pojo(Plain Old Java Object)是一种简单的对象模型,通常用于表示数据实体。Map接口则是Java集合框架的一部分,它提供了键值对的数据存储方式,方便数据的存取。将Pojo对象转换为Map,可以简化数据...

    【java】mapstruct自定义类的转换示例(csdn)————程序.pdf

    本示例主要介绍如何在MapStruct中自定义类转换,以便处理特定的转换需求。我们将通过分析标题、描述以及提供的代码片段来深入理解这一过程。 首先,MapStruct通过注解驱动的方式,自动为对象间的转换生成源码,极大...

    json 转实体类.zip

    "json 转实体类.zip"这个压缩包包含了一个工具类,目的是将接收到的JSON格式的数据自动转化为Java中的实体类对象。这在实际开发中非常实用,因为它简化了数据处理的步骤,提高了代码的可读性和可维护性。 JSON-lib...

    MapStruct实体间转换的简单用法

    MapStruct这个插件可以用来处理domin实体类与model类的属性映射,可配置性强。 二、MapStruct的优点 MapStruct是一个一直在进步的工具,后面的版本不断改进之前版本的不足,修复之前版本的bug。使用的时候最好最新...

    各种转换,xml,实体bean,动态bean,map等

    标题和描述中提到的"各种转换,xml,实体bean,动态bean,map等"涉及了Java编程语言中的一些核心概念,这些概念在企业级应用开发中非常常见。下面我们将详细探讨这些知识点。 1. **XML(Extensible Markup Language)*...

    MapStruct实体转换及List转换的方法讲解

    MapStruct的主要特点是自动生成映射接口的实现类,不需要手动编写映射逻辑。只需要定义一个Mapper接口,MapStruct就会自动实现这个映射接口,避免了复杂繁琐的映射实现。 在本文中,我们将介绍MapStruct实体转换及...

    SSM框架的CURD,替换之前的实体类为map

    然而,在某些情况下,我们可能需要将实体类替换为Map类型,以实现更加灵活的数据处理。本文将深入探讨这一转换的过程以及其背后的考量因素。 首先,我们来看看为什么会有将实体类替换为Map的需求。实体类虽然结构...

    在Java 8中将List转换为Map对象方法

    在Java 8中将List转换为Map对象方法 在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 ...

Global site tag (gtag.js) - Google Analytics