最近在用mybatis做項目,遇到將date格式化顯示到easyui的問題,需要將List<Map<String, Object>>轉化為List<JavaBean>,研究好久,終於在網上找到了一個方法:
核心方法如下:
- /**
- * 根據List<Map<String, Object>>數據轉換為JavaBean數據
- * @param datas
- * @param beanClass
- * @return
- * @throws CommonException
- */
- public List<T> ListMap2JavaBean(List<Map<String, Object>> datas, Class<T> beanClass) throws CommonException {
- // 返回數據集合
- List<T> list = null;
- // 對象字段名稱
- String fieldname = "";
- // 對象方法名稱
- String methodname = "";
- // 對象方法需要賦的值
- Object methodsetvalue = "";
- try {
- list = new ArrayList<T>();
- // 得到對象所有字段
- Field fields[] = beanClass.getDeclaredFields();
- // 遍歷數據
- for (Map<String, Object> mapdata : datas) {
- // 創建一個泛型類型實例
- T t = beanClass.newInstance();
- // 遍歷所有字段,對應配置好的字段並賦值
- for (Field field : fields) {
- // 獲取注解配置
- JavaBean javaBean = field.getAnnotation(JavaBean.class);
- if(null != javaBean) { // 有注解配置,下一步操作
- // 全部轉化為大寫
- String dbfieldname = javaBean.dbfieldname().toUpperCase();
- // 獲取字段名稱
- fieldname = field.getName();
- // 拼接set方法
- methodname = "set" + StrUtil.capitalize(fieldname);
- // 獲取data里的對應值
- methodsetvalue = mapdata.get(dbfieldname);
- // 賦值給字段
- Method m = beanClass.getDeclaredMethod(methodname, field.getType());
- m.invoke(t, methodsetvalue);
- }
- }
- // 存入返回列表
- list.add(t);
- }
- } catch (InstantiationException e) {
- throw new CommonException(e, "創建beanClass實例異常");
- } catch (IllegalAccessException e) {
- throw new CommonException(e, "創建beanClass實例異常");
- } catch (SecurityException e) {
- throw new CommonException(e, "獲取[" + fieldname + "] getter setter 方法異常");
- } catch (NoSuchMethodException e) {
- throw new CommonException(e, "獲取[" + fieldname + "] getter setter 方法異常");
- } catch (IllegalArgumentException e) {
- throw new CommonException(e, "[" + methodname + "] 方法賦值異常");
- } catch (InvocationTargetException e) {
- throw new CommonException(e, "[" + methodname + "] 方法賦值異常");
- }
- // 返回
- return list;
- }