編寫轉(zhuǎn)換幫助類
/**
* 將JavaBean轉(zhuǎn)換成Map
*
* @param obj
* @return
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static Map beanToMap(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// 創(chuàng)建map集合
Map map = new HashMap();
// 獲取JavaBean中所有屬性
Field[] fields = obj.getClass().getDeclaredFields();
for (Field fie : fields) {
// 將屬性第一個字母轉(zhuǎn)換成大寫
String frist = fie.getName().substring(0, 1).toUpperCase();
// 獲取屬性的類型
Class<?> type = fie.getType();
// 封裝屬性的get
String getter = "";
if ("boolean".equals(type.getName())) {
getter = "is" + frist + fie.getName().substring(1);
} else {
getter = "get" + frist + fie.getName().substring(1);
}
// 獲取JavaBean的方法
Method method = obj.getClass().getMethod(getter, new Class[] {});
// 調(diào)用方法,并接收返回值
Object objec = method.invoke(obj, new Object[] {});
// 判斷返回值不為空
if (objec != null) {
map.put(fie.getName(), objec);
} else {
map.put(fie.getName(), "");
}
}
return map;
}
/**
* 將Map轉(zhuǎn)換為JavaBean
*
* @param map
* @param obj
* @return
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static Object mapToBean(Map<String, Object> map, Object obj) throws NoSuchMethodException, SecurityException,
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 獲取JavaBean中的所有屬性
Field[] field = obj.getClass().getDeclaredFields();
for (Field fi : field) {
// 判斷key值是否存在
if (map.containsKey(fi.getName())) {
// 獲取key的value值
String value = map.get(fi.getName()).toString();
// 將屬性的第一個字母轉(zhuǎn)換為大寫
String frist = fi.getName().substring(0, 1).toUpperCase();
// 屬性封裝set方法
String setter = "set" + frist + fi.getName().substring(1);
// 獲取當(dāng)前屬性類型
Class<?> type = fi.getType();
// 獲取JavaBean的方法,并設(shè)置類型
Method method = obj.getClass().getMethod(setter, type);
// 判斷屬性為double類型
if ("java.lang.String".equals(type.getName())) {
// 調(diào)用當(dāng)前Javabean中set方法,并傳入指定類型參數(shù)
method.invoke(obj, value);
} else if ("int".equals(type.getName())) {
method.invoke(obj, Integer.parseInt(value));
}else if ("double".equals(type.getName())) {
method.invoke(obj, Double.valueOf(value));
} else if ("char".equals(type.getName())) {
method.invoke(obj, value);
}
}
}
return obj;
}
/**
* 將List<Map<String,Object>>轉(zhuǎn)換成List<javaBean>
*
* @param listm
* @param obj
* @return
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static List<Object> ListMapToListBean(List<Map<String, Object>> listm, Object obj)
throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
List<Object> list = new ArrayList<Object>();
// 循環(huán)遍歷出map對象
for (Map<String, Object> m : listm) {
// 調(diào)用將map轉(zhuǎn)換為JavaBean的方法
Object objs = mapToBean(m, obj);
// 添加進(jìn)list集合
list.add(objs);
}
return list;
}
/**
* 將list<javabean>轉(zhuǎn)換為List<Map>
*
* @param list
* @return
* @throws NoSuchMethodException
* @throws SecurityException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InvocationTargetException
*/
public static List<Map<String, Object>> ListBeanToListMap(List<Object> list) throws NoSuchMethodException,
SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
for (Object ob : list) {
listmap.add(beanToMap(ob));
}
return listmap;
}
遍歷出List<JavaBean>的對象熬词,調(diào)用上面已經(jīng)寫好的ListBeanToListMap方法,根據(jù)Javabean的屬性調(diào)用get方法完成對Map集合的轉(zhuǎn)換肠虽,然后再將已轉(zhuǎn)換的Map集合添加至創(chuàng)建好的List<Map>集合中像吻。List<Map>集合轉(zhuǎn)換為List<Javabean>也是同樣的運行方式,只是將get轉(zhuǎn)為set了躁劣,這就是使用反射將List<Javabean>和List<Map>集合進(jìn)行互相轉(zhuǎn)換