Java泛型初体验之-一个通用的将表中记录生成对应javabean的集合类

前段时间写一个RSS聚合系统,需要大量用到从数据库中将表中符合条件的记录取出来生成相应的javabean的集合,于是结合泛型和反射机制写了一个较通用的封装类。源代码如下:

java 代码
  1. /**  
  2.  * 根据传入的javabean对象和ResultSet产生一个具体javaBean的Collection  
  3.  */  
  4.   
  5. import java.util.*;   
  6. import java.sql.*;   
  7. import java.lang.reflect.*;   
  8.   
  9. public class BeanCollectionBuilder{   
  10.        
  11.     private BeanCollectionBuilder(){}   
  12.        
  13.     /**  
  14.      * 得到一个jvaBean的Colleciton  
  15.      * @param bean 要生成的javaBean  
  16.      * @param rs 记录集  
  17.      * @return 一个具体javaBean的Collection  
  18.      */  
  19.     public static <T> Collection<T> getBeanCollection(T object,ResultSet rs){   
  20.         Collection<T> collection = null;   
  21.         Class bean = object.getClass();   
  22.         Method[] methods = bean.getMethods();//获得bean的方法   
  23.         List<Method> setMethodList = new ArrayList<Method>();//构造一个List用来存放bean中所有set开头的方法   
  24.         //获得Bean中所有set方法   
  25.         for (int i = 0;i < methods.length;i++){   
  26.             Method method = methods[i];   
  27.             if (method.getName().startsWith("set")){   
  28.                 setMethodList.add(method);   
  29.             }   
  30.         }   
  31.   
  32.         ResultSetMetaData meta = null;   
  33.         try{   
  34.             meta = rs.getMetaData();   
  35.             //如果记录集中的字段不等于Bean中的属性值,抛出异常   
  36.             if (setMethodList.size() != meta.getColumnCount()){   
  37.                 throw new IllegalArgumentException("传入的JavaBean与ResultSet不一致");   
  38.             }   
  39.             //将得到的set方法构建一个Method Array   
  40.             Method[] setMethodArray = new Method[setMethodList.size()];   
  41.             setMethodList.toArray(setMethodArray);   
  42.             int count = setMethodArray.length;   
  43.             //构建一个String数组用来存放对应的ResultSet中的字段   
  44.             String[] field = new String[count];   
  45.             for (int i = 0;i < count;i++){   
  46.                 field[i] = setMethodArray[i].getName().substring(3).toLowerCase();   
  47.             }   
  48.             //将ResultSet中的每一条记录构建一个JavaBean实例,然后添加到Collection中   
  49.             collection = new ArrayList<T>();   
  50.             while(rs.next()){   
  51.                 T o = (T)bean.newInstance();   
  52.                 for (int i = 0;i < count;i++){   
  53.                     Object[] param = new Object[]{rs.getObject(field[i])};   
  54.                     setMethodArray[i].invoke(o,param);   
  55.                 }   
  56.                 collection.add(o);      
  57.             }   
  58.         }   
  59.         catch(Exception e){   
  60.             throw e;   
  61.         }   
  62.         finally{      
  63.             return collection;//最后返回这个Collection   
  64.         }   
  65.     }   
  66.   
  67. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值