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

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

直接上干货!

 

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";
	
}

 

 

你可能感兴趣的:(java)