`
vortexchoo
  • 浏览: 64030 次
  • 性别: 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  
请问怎么调用呢?刚试验,,还没成功

相关推荐

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

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

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

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

    POI导出Excel表格通用工具类

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

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  ...

    AppFramework_V1.0_New

    实体类属性数目越多、返回记录数越多,用到反射的次数也越多,查询性能降低就越明显。 &lt;br&gt;第五,不能方便地限定查询语句返回的字段。ADO.Net执行查询时,select语句里设置了几个字段就返回几个字段到DataTable。...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    实体类属性数目越多、返回记录数越多,用到反射的次数也越多,查询性能降低就越明显。 &lt;br&gt;第五,不能方便地限定查询语句返回的字段。ADO.Net执行查询时,select语句里设置了几个字段就返回几个字段到DataTable。...

    AppFramework_V1.0

    实体类属性数目越多、返回记录数越多,用到反射的次数也越多,查询性能降低就越明显。 &lt;br&gt;第五,不能方便地限定查询语句返回的字段。ADO.Net执行查询时,select语句里设置了几个字段就返回几个字段到DataTable。...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    第7章 反射与异常处理 195 7.1 反射的基础 196 实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 197 实例152 查看类的声明 198 实例153 查看类的成员 199 实例154 按继承层次对类排序 201 ...

    JAVA面试题最全集

    81.UML中,类视图如何表示类中的继承与聚合? 82.客户端游标与服务器端游标的区别? 83.动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是...

    简单留言板

    要映射URL到控制器需要一个Controller类来记录类名和方法,还要一个Map集合存储映射 URL -&gt; Controller 在分发器初始化时通过反射读取控制器和其方法上指定URL添加到Map集合中.这需要一个注解@Mapping来指定URL ...

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Java常见面试题208道.docx

    124.hibernate 实体类必须要有无参构造函数吗?为什么? 十三、Mybatis 125.mybatis 中 #{}和 ${}的区别是什么? 126.mybatis 有几种分页方式? 127.RowBounds 是一次性查询全部结果吗?为什么? 128.mybatis 逻辑...

    支持多数据库的ORM框架ef-orm.zip

    表结构元数据的API也向用户开放,同时支持在使用过程中,灵活调整映射关系,因此用户可以用API动态的创建表结构的模型,从而实现各种动态类型和表的映射(例如POJO中包含一个Map,用于映射各种动态扩展的字段)企业...

Global site tag (gtag.js) - Google Analytics