代码改变世界

ResultSet转java对象的通用解决方案

2011-08-04 19:22  hanwesley  阅读(1310)  评论(0编辑  收藏  举报

根据resultSet,以及给定对象的Class对象进行填充,Class需要遵循JavaBean规范。

  1.        private Collection mergeObject(ResultSet rs, Class clazz) throws Exception {  
  2.     ResultSetMetaData rmd = (ResultSetMetaData) rs.getMetaData();  
  3.     Collection coll = new ArrayList();  
  4.     ;  
  5.     while (rs.next()) {  
  6.         Object obj = clazz.newInstance();  
  7.         for (int i = 1; i <= rmd.getColumnCount(); i++) {  
  8.             beanRegister(obj, rmd.getColumnName(i), rs.getString(i));//根据列名和对应值对对象属性进行赋值  
  9.         }  
  10.         coll.add(obj);  
  11.     }  
  12.     return coll;  
  13. }  

根据get方法的返回值类型,判断当前属性的类型,调用method.invoke(Object,param);

  1. private void beanRegister(Object object, String beanProperty, String value) {  
  2.         Object[] beanObject = beanMatch(object.getClass(), beanProperty);  
  3.         Object[] cache = new Object[1];  
  4.         Method getter = (Method) beanObject[0];  
  5.         Method setter = (Method) beanObject[1];  
  6.         try {  
  7.             // 通过get获得方法类型  
  8.             String methodType = getter.getReturnType().getName();  
  9.             if ((methodType.equalsIgnoreCase("long") || methodType.equalsIgnoreCase("java.lang.Long"))  
  10.                     && !"".equals(value) && value != null) {  
  11.                 cache[0] = new Long(value);  
  12.                 setter.invoke(object, cache);  
  13.             } else if ((methodType.equalsIgnoreCase("int") || methodType.equalsIgnoreCase("java.lang.Integer"))  
  14.                     && !"".equals(value) && value != null) {  
  15.                 cache[0] = new Integer(value);  
  16.                 setter.invoke(object, cache);  
  17.             } else if ((methodType.equalsIgnoreCase("short") || methodType.equalsIgnoreCase("java.lang.Short"))  
  18.                     && !"".equals(value) && value != null) {  
  19.                 cache[0] = new Short(value);  
  20.                 setter.invoke(object, cache);  
  21.             } else if ((methodType.equalsIgnoreCase("float") || methodType.equalsIgnoreCase("java.lang.Float"))  
  22.                     && !"".equals(value) && value != null) {  
  23.                 cache[0] = new Float(value);  
  24.                 setter.invoke(object, cache);  
  25.             } else if ((methodType.equalsIgnoreCase("double") || methodType.equalsIgnoreCase("java.lang.Double"))  
  26.                     && !"".equals(value) && value != null) {  
  27.                 cache[0] = new Double(value);  
  28.                 setter.invoke(object, cache);  
  29.             } else if ((methodType.equalsIgnoreCase("boolean") || methodType.equalsIgnoreCase("java.lang.Boolean"))  
  30.                     && !"".equals(value) && value != null) {  
  31.                 cache[0] = new Boolean(value);  
  32.                 setter.invoke(object, cache);  
  33.             } else if ((methodType.equalsIgnoreCase("java.lang.String")) && !"".equals(value) && value != null) {  
  34.                 cache[0] = value;  
  35.                 setter.invoke(object, cache);  
  36.             } else if (methodType.equalsIgnoreCase("java.io.InputStream")) {  
  37.             } else if (methodType.equalsIgnoreCase("char")) {  
  38.                 cache[0] = (Character.valueOf(value.charAt(0)));  
  39.                 setter.invoke(object, cache);  
  40.             }  
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  


  1. private Object[] beanMatch(Class clazz, String beanProperty) {  
  2.         Object[] result = new Object[2];  
  3.         char beanPropertyChars[] = beanProperty.toCharArray();  
  4.         beanPropertyChars[0] = Character.toUpperCase(beanPropertyChars[0]);  
  5.         String s = new String(beanPropertyChars);  
  6.         String names[] = { ("set" + s).intern(), ("get" + s).intern(), ("is" + s).intern(), ("write" + s).intern(),  
  7.                 ("read" + s).intern() };  
  8.         Method getter = null;  
  9.         Method setter = null;  
  10.         Method methods[] = clazz.getMethods();  
  11.         for (int i = 0; i < methods.length; i++) {  
  12.             Method method = methods[i];  
  13.             if (!Modifier.isPublic(method.getModifiers()))  
  14.                 continue;  
  15.             String methodName = method.getName().intern();  
  16.             for (int j = 0; j < names.length; j++) {  
  17.                 String name = names[j];  
  18.                 if (!name.equals(methodName))  
  19.                     continue;  
  20.                 if (methodName.startsWith("set") || methodName.startsWith("read"))  
  21.                     setter = method;  
  22.                 else  
  23.                     getter = method;  
  24.             }  
  25.         }  
  26.         result[0] = getter;  
  27.         result[1] = setter;  
  28.         return result;  
  29.     }