模拟工具类BeanUtils将Map和Bean互相转换的功能
public class BeanUtils {
private BeanUtils() {}
public static <T> T MapToBean(Map<String,Object> map,Class<T> clazz) throws Exception{
T t = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Column annotation = field.getAnnotation(Column.class);
if(annotation != null) {
String key = annotation.value();
Object object = map.get(key);
if(object != null) {
String setMethodName = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
Method setMethod = clazz.getMethod(setMethodName, object.getClass());
setMethod.invoke(t, object);
}
}
}
return t;
}
public static Map<String,Object> beanToMap(Object object) throws Exception {
HashMap<String,Object> map = new HashMap<>();
Class<?> clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Column annotation = field.getAnnotation(Column.class);
if(annotation != null) {
String key = annotation.value();
String methodName = field.getName();
Method method = clazz.getMethod("get" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1));
Object value = method.invoke(object);
map.put(key, value);
}
}
return map;
}
}
自定义注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String value();
}
bean
public class Student {
@Column("sname")
private String name;
@Column("age")
private Integer age;
public Student() {
super();
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
测试类
public class Test01 {
public static void main(String[] args) throws Exception {
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("sname", "zhangsan");
map.put("age", 18);
Student s = BeanUtils.MapToBean(map, Student.class);
System.out.println(s);
Map<String, Object> map2 = BeanUtils.beanToMap(s);
for (Entry<String, Object> keyValue : map2.entrySet()) {
System.out.println(keyValue.getKey() + "=" + keyValue.getValue());
}
}
}