一 JavaBean和Map之间的相互转化
JavaBean和Map相互转换:
Map是由key-value组成,key是不能重复的.
JavaBean是由属性名和属性值组成,属性名是不同的.
如果把JavaBean的属性名看做是Map的key,把属性值看做是Map的value,那么一个Map对象和一个JavaBean是等级的.
------------------------------------------------------------------------------
把JavaBean转换为Map对象.
publicstatic Map<String,Object> bean2map(Object bean){}
把Map对象转换为JavaBean.
publicstatic Objectmap2bean(Map<String,Object> beanMap,Class beanType){}
package com.OSA.Day01.JavaBean_02;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
//@Setter 为所有字段生成set方法
//@Getter 为所有字段生成get方法
//@ToString 生成toString()方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person_02 {
private Long id;
private String firstName;
private String lastName;
private boolean man;
}
package com.OSA.Day01.JavaBean_02;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BeanUtil {
public static void main(String[] args) throws Exception {
Map mp = bean2Map(new Person_02(100L, "liu", "huahua", true));
System.out.println(mp);
Map mp2 = new HashMap();
mp2.put("id", 200L);
mp2.put("lastName", "xiaolin");
mp2.put("firstName", "zhang");
mp2.put("man", false);
Object obj = map2Ban(mp2, Person_02.class);
System.out.println(obj);
}
// 把bean转换为map
public static Map<String, Object> bean2Map(Object bean) throws Exception {
Map map = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(),
Object.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
String name = pd.getName();
Method md = pd.getReadMethod();
map.put(name, md.invoke(bean));
}
return map;
}
// 把map转换为bean 并且为属性赋值
public static <T> T map2Ban(Map<String, Object> beanMap, Class<T> beanType) throws Exception {
T obj =beanType.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(beanType,
Object.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
String name = pd.getName();
Object value = beanMap.get(name);
Method md = pd.getWriteMethod();
md.invoke(obj, value);
}
return obj;
}
}
打印结果
{id=100, lastName=huahua, firstName=liu, man=true}
Person_02(id=200, firstName=zhang, lastName=xiaolin, man=false)