`
vortexchoo
  • 浏览: 67512 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

利用反射处理map 与 实体类的值映射

    博客分类:
  • java
阅读更多

可能有点不完善。不过经测试,能满足大部分需求。

直接上干货!

 

public class DataHelper {

  public static void putDataIntoEntity(Map<String, Object> map, Object entity) throws SecurityException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		if (entity != null && map != null&& map.size()>0) {
			//获取传入实体类的属性Filed数组
			Field[] field_arr = Class.forName(entity.getClass().getCanonicalName()).getDeclaredFields();
			//遍历数组
			for (Field field : field_arr) {
				//获取属性名称
				String fieldName = field.getName();
				//判断map中是否存在对应的属性名称(注:这个方法要想使用就必须保证map中的key与实体类的属性名称一致)
				if (map.containsKey(fieldName)) {
					//调用本类中的帮助方法来获取当前属性名对应的方法名(“set”为getMethodName方法的第二个参数)
					String methodName = getMethodName(fieldName,MethodHelper.SET_METHOD);
					//获取当前key对应的值
					Object obj = map.get(fieldName);
					//根据获取的方法名称及当前field的类型获取method对象
					Method method = entity.getClass().getDeclaredMethod(methodName, field.getType());
					//调用当前实体类的方法将数值set进去
					method.invoke(entity, obj);
				}
			}
		}
	}

	/**
	 * @author Chunf
	 * @param key 属性名
	 * @param MethodType 获取方法类型(set or get)
	 * @return 方法名称,反射使用
	 */
	public static String getMethodName(String key, String MethodType) {
		String methodName = "";
		if (key != null && !"".equals(key)) {
			String[] arr = key.split("");
			for (int i = 0; i < arr.length; i++) {
				String temp = arr[i];
				if (i == 1) {
					methodName += temp.toUpperCase();
				} else {
					methodName += temp;
				}
			}
		}
		return MethodType+methodName;
	}

}



public class MethodHelper {
	
	public static final String SET_METHOD = "set";
	
	public static final String GET_METHOD = "get";
	
}

 

 

分享到:
评论
3 楼 vortexchoo 2016-11-24  

很久没管博客了,今天才看到,我试了一下,好着呢。。确定实体类中的日期类型 跟 传入map的data 是同一个类型
2 楼 ddsdggsg 2016-11-16  
成功了,,,,不知大哥改进没有,,,我这传日期类型数据处理报错,,,,,
1 楼 ddsdggsg 2016-11-16  
请问怎么调用呢?刚试验,,还没成功

相关推荐

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

    通常,该类会使用反射机制遍历`Map`中的每个键值对,根据键来找到对应实体类的setter方法,并调用它设置值。为了确保安全,工具类可能还会包含一些错误处理机制,如检查键是否存在,值类型是否匹配等。 在实际开发...

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

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

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

    描述中提到的"XML节点名称要与Bean相同",这意味着在设计实体类时,应当使类字段名与XML节点名称保持一致,这样在映射过程中可以更直观和方便。例如,XML中的`&lt;name&gt;`节点应对应Java Bean中的`private String name;`...

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

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

    利用反射实现对象转json格式字符串

    在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法的信息。本文将深入探讨如何使用反射技术将对象转换为JSON格式的字符串。我们将以一个名为`JsonUtils`的Java类为例,该类...

    java Pojo转Map

    在这个工具类中,我们使用反射API来获取Pojo类的所有字段,然后将这些字段的名称作为Map的键,字段的值作为对应的值。注意,这个方法只处理当前类的字段,如果Pojo类中有嵌套的其他Pojo对象,它们不会被自动展开。若...

    MapStruct 1.2.0 参考指南

    - 无运行时依赖:MapStruct生成的映射器是普通的Java类,不依赖于MapStruct库,可以轻松地集成到任何项目中。 - 易于使用:只需定义映射器接口,并在接口中声明映射方法,MapStruct会在编译时自动实现这些接口。 ##...

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

    Java的反射API(Reflection API)允许程序在运行时检查类的信息,创建和操作动态Bean。另外,Spring框架的Prototype bean定义也可以实现类似的功能,允许每次请求时创建一个新的bean实例。 4. **Map**: Map是Java...

    优雅的对象转换解决方案,为什么更推荐MapStruct呢.docx

    - 接着,定义实体类(Entity)和数据传输对象(DTO),例如`Order`和`OrderQueryParam`。这些类通常包含相同或相似的属性,但可能有不同的命名规则或额外的字段。 - 创建映射接口,使用MapStruct的注解定义转换...

    浅论泛型与反射机制结合(hibernate)

    4. 自定义映射:Hibernate允许开发者通过反射机制自定义实体类的属性与数据库表之间的映射关系。例如,使用`@Column`注解或其他自定义注解,然后在映射配置中通过反射解析这些注解,实现灵活的数据库映射。 总之,...

    mapstruct:用于生成类型安全的bean映射器的注释处理器

    与在运行时工作的映射框架相比,MapStruct具有以下优点: 通过使用普通方法调用而不是反射来快速执行编译时类型安全。 只能映射彼此映射的对象和属性,因此不会将订单实体意外映射到客户DTO等。 独立的代码-没有...

    免费开源!!生成类型安全 bean 映射器的注释处理器

    MapStruct 是一个 Java注释处理器,用于为 Java bean 类生成类型安全且高性能的映射器。它使您免于手动编写映射代码,这是一项乏味且容易出错的任务。生成器带有合理的默认值和许多内置类型转换,但在配置或实现特殊...

    C#中的简单模型/实体映射器

    3. **泛型方法**:在映射器类中,可以创建一个泛型方法,如`Map, TDestination&gt;(TSource source)`,该方法内部使用反射来实现映射。 4. **扩展方法**:为了方便使用,可以创建一个静态类,并在其中定义扩展方法`Map...

    POI导出Excel表格通用工具类

    利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...

    Java工具类之Apache的Commons Lang和BeanUtils

    2. **属性访问**:`PropertyUtils`类提供了对Java对象属性的无反射访问,可以方便地获取、设置和删除属性。 3. **类型转换**:BeanUtils在属性复制时自动处理类型转换,使得不同类型的属性之间可以进行赋值。 4. *...

    java Map转Object与Object转Map实现代码

    Map转Object主要是将Map中的键值对填充到一个指定类型的对象中,这里我们以一个名为`User`的实体类为例。首先,定义`User`类: ```java package reflect; public class User { private String name; private int...

    解析json数据

    当我们有一个实体类,Gson会尝试将JSON字符串中的键与实体类的属性对应。如果JSON中的键是字符串类型,且与实体类的字段名匹配,那么Gson就能正确地将数据填充到对象中。然而,当键是数字或者动态变化时,问题就出现...

    JAVA读取Excel,建库建表,并生成java实体

    Java实体类通常用于表示数据库中的表,我们可以通过反射API或第三方库如MapStruct生成这些类。例如,对于每个字段,我们创建一个私有属性,一个getter和一个setter方法: ```java public class MyEntity { ...

Global site tag (gtag.js) - Google Analytics