JavaBean和Map之间的转化
* 实现Javabean和Map之间的转化
* 1)Javabean拥有多组属性名和属性值
*,每一个属性名对应一个属性值
* 2)Map有多组key-value,
每一个key对应一个value,可以是不同的两者等价
*
* map:
* Map 集合类用于存储元素对(称作“键”和“值”),
*其中每个键映射到一个值。
*
* 1.put(Object key, Object value) 将指定值与指定键相关联
* 2.clear() 从 Map 中删除所有映射
* 3.remove(Object key) 从 Map 中删除键和关联的值
* 4.putAll(Map t) 将指定 Map 中的所有映射复制到此 map
1 package com.first.javabeantomap; 2 3 import com.first.javabean.Person; 4 5 import java.beans.BeanInfo; 6 import java.beans.IntrospectionException; 7 import java.beans.Introspector; 8 import java.beans.PropertyDescriptor; 9 import java.lang.reflect.InvocationTargetException; 10 import java.util.HashMap; 11 import java.util.Iterator; 12 import java.util.Map; 13 import java.util.Set; 14 15 /** 16 * 实现Javabean和Map之间的转化 17 * 1)Javabean拥有多组属性名和属性值 18 *,每一个属性名对应一个属性值 19 * 2)Map有多组key-value, 20 * 每一个key对应一个value,可以是不同的两者等价 21 * 22 * map: 23 * Map 集合类用于存储元素对(称作“键”和“值”), 24 *其中每个键映射到一个值。 25 * 26 * 1.put(Object key, Object value) 将指定值与指定键相关联 27 * 2.clear() 从 Map 中删除所有映射 28 * 3.remove(Object key) 从 Map 中删除键和关联的值 29 * 4.putAll(Map t) 将指定 Map 中的所有映射复制到此 map 30 */ 31 public class JavaToMap { 32 33 public static void main(String[] args) 34 throws IllegalAccessException, IntrospectionException, 35 InvocationTargetException, InstantiationException { 36 //创建一个Person实例 37 Person person=new Person(); 38 Map<String,Object> map=javabeanToMap(person);//throws IllegalAccessException, IntrospectionException, InvocationTargetException 39 System.out.println(map); 40 41 //创建javabean对象 42 43 Object obj=mapToJavabean1(Person.class,map); 44 System.out.println(obj); 45 46 Person p=mapToJavabean2(Person.class,map); 47 System.out.println(p); 48 49 } 50 51 /** 52 * Javabean转化为Map 53 * @return 54 */ 55 public static Map<String ,Object> javabeanToMap(Object bean) throws IntrospectionException, InvocationTargetException, IllegalAccessException { 56 Map<String ,Object> map=new HashMap<>(); 57 //获取javabean的对象 58 BeanInfo beanInfo=Introspector.getBeanInfo(bean.getClass(),Object.class); 59 //获取javabean中的属性描述器 60 PropertyDescriptor[] descriptor=beanInfo.getPropertyDescriptors(); 61 for (PropertyDescriptor pds:descriptor){ 62 String name=pds.getName(); 63 //调用getter方法,获取属性值 64 Object value=pds.getReadMethod().invoke(bean);//抛出异常 65 map.put(name,value); 66 67 } 68 return map; 69 } 70 71 /** 72 * Map转化为Javabean 73 * 写法一 74 * @return 75 */ 76 private static Object mapToJavabean1(Class beanType,Map map) throws IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException { 77 //创建javabean对象 78 BeanInfo beanInfo=Introspector.getBeanInfo(beanType,Object.class);//抛出异常 79 Object obj=beanType.newInstance(); 80 //获取javabean的属性描述器 81 PropertyDescriptor[] descriptors=beanInfo.getPropertyDescriptors(); 82 //给JavaBean对象赋值 83 for (PropertyDescriptor pds:descriptors){ 84 //获取与属性同名的key值 85 Object value=map.get(pds.getName()); 86 //调用setter方法 87 pds.getWriteMethod().invoke(obj,value);//抛出异常 88 } 89 90 return obj; 91 } 92 93 94 /** 95 * Map转化为Javabean 96 * 写法二:推荐使用这种方法 97 * 与第一种方法不同的是返回的时候进行了类型转化,方便用者 98 * @return 99 */ 100 private static <T>T mapToJavabean2(Class<T>beanType,Map<String,Object> map) throws IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException { 101 //创建javabean对象 102 BeanInfo beanInfo=Introspector.getBeanInfo(beanType,Object.class);//抛出异常,Object.class不能少,-否则出现空指针异常 103 Object obj=beanType.newInstance(); 104 //获取javabean的属性描述器 105 PropertyDescriptor[] descriptors=beanInfo.getPropertyDescriptors(); 106 //给JavaBean对象赋值 107 for (PropertyDescriptor pds:descriptors){ 108 //获取与属性同名的key值 109 Object value=map.get(pds.getName()); 110 //调用setter方法 111 pds.getWriteMethod().invoke(obj,value);//抛出异常 112 } 113 return (T)obj;//返回的时候强转 114 } 115 116 }