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 }

猜你喜欢

转载自www.cnblogs.com/archer-lcy/p/9183299.html