欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java-Map和实体模型类的相互转化(运用反射)

程序员文章站 2022-06-15 12:09:02
...

实体模型类:

public class model {

	private String Name1;
	private String Name2;
	private String Name3;
	public model() {
		super();
	}
	public model(String name1, String name2, String name3) {
		super();
		Name1 = name1;
		Name2 = name2;
		Name3 = name3;
	}
	@Override
	public String toString() {
		return "model [Name1=" + Name1 + ", Name2=" + Name2 + ", Name3="
				+ Name3 + "]";
	}
	public String getName1() {
		return Name1;
	}
	public void setName1(String name1) {
		Name1 = name1;
	}
	public String getName2() {
		return Name2;
	}
	public void setName2(String name2) {
		Name2 = name2;
	}
	public String getName3() {
		return Name3;
	}
	public void setName3(String name3) {
		Name3 = name3;
	}
	
}

实体类转map:

public class Map_ModelUtil {
         /**  实体类转化成Map
	 * @param classModel
	 * @return
	 */
	public static Map ClassToMap( Object classModel) {
		Object temp = classModel;
		Map<Object,Object> map = new HashMap<Object, Object>();
		Class<?> clz = temp.getClass();
		Field[] fields = clz.getDeclaredFields();
		for (Field field : fields) {
			field.setAccessible(true);
			try {
				map.put(field.getName(), field.get(temp));//键值对为  属性名:属性值
			} catch (Exception e) {
				System.out.println("转换异常:" + e.getMessage());
			}
		}
		return map;
	}
}

测试:

	public static void main(String[] args) {
		model test = new model("value1","value2","value3");
		System.out.println(Map_ModelUtil.ClassToMap(test));
        }

结果:

{Name3=value3, Name2=value2, Name1=value1}

 

 

Map转实体类:

public class Map_ModelUtil {

	/** map转化成实体类
	 * @param map
	 * @param classModel
	 * @return
	 */
	public static Object MapToClassp( Map map , Object classModel) {
		Map<Object,Object> tempMap = map;
		Object tempClass = classModel;
		Class<?> clz = tempClass.getClass();
		Field[] fields = clz.getDeclaredFields();
		for (Field field : fields) {
			field.setAccessible(true);
			try {
				if (tempMap.containsKey(field.getName())) { //如果map集合存在与属性名相同的键
					field.set(tempClass, tempMap.get(field.getName())); //把属性值赋予给目标类对应属性
				}
			} catch (Exception e) {
				System.out.println("转换异常:" + e.getMessage());
			}
		}
		return tempClass;
	}
	

}

测试:

	public static void main(String[] args) {
		Map<String,String> test = new HashMap<String, String>();
		test.put("Name1", "value1");
		test.put("Name2", "value2");
		test.put("Name3", "value3");
		System.out.println(Map_ModelUtil.MapToClassp(test, new model()).toString());
	}

结果:

model [Name1=value1, Name2=value2, Name3=value3]

 

在系统的开发中,有时候我们需要把实体类的每一个属性名和值都拿出来,如果靠传统的get方法和手写的属性名,效率低而且复用性差,尤其是当出现一个模型有几十上百个属性字段时,一个一个写简直浪费时间,用这个转化,把实体类的属性名和属性值直接转化成键值对,方便遍历。