2007-04-21
Java泛型初体验之-一个通用的将表中记录生成对应javabean的集合类
关键字: Generics前段时间写一个RSS聚合系统,需要大量用到从数据库中将表中符合条件的记录取出来生成相应的javabean的集合,于是结合泛型和反射机制写了一个较通用的封装类。源代码如下:
java 代码
- /**
- * 根据传入的javabean对象和ResultSet产生一个具体javaBean的Collection
- */
- import java.util.*;
- import java.sql.*;
- import java.lang.reflect.*;
- public class BeanCollectionBuilder{
- private BeanCollectionBuilder(){}
- /**
- * 得到一个jvaBean的Colleciton
- * @param bean 要生成的javaBean
- * @param rs 记录集
- * @return 一个具体javaBean的Collection
- */
- public static <T> Collection<T> getBeanCollection(T object,ResultSet rs){
- Collection<T> collection = null;
- Class bean = object.getClass();
- Method[] methods = bean.getMethods();//获得bean的方法
- List<Method> setMethodList = new ArrayList<Method>();//构造一个List用来存放bean中所有set开头的方法
- //获得Bean中所有set方法
- for (int i = 0;i < methods.length;i++){
- Method method = methods[i];
- if (method.getName().startsWith("set")){
- setMethodList.add(method);
- }
- }
- ResultSetMetaData meta = null;
- try{
- meta = rs.getMetaData();
- //如果记录集中的字段不等于Bean中的属性值,抛出异常
- if (setMethodList.size() != meta.getColumnCount()){
- throw new IllegalArgumentException("传入的JavaBean与ResultSet不一致");
- }
- //将得到的set方法构建一个Method Array
- Method[] setMethodArray = new Method[setMethodList.size()];
- setMethodList.toArray(setMethodArray);
- int count = setMethodArray.length;
- //构建一个String数组用来存放对应的ResultSet中的字段
- String[] field = new String[count];
- for (int i = 0;i < count;i++){
- field[i] = setMethodArray[i].getName().substring(3).toLowerCase();
- }
- //将ResultSet中的每一条记录构建一个JavaBean实例,然后添加到Collection中
- collection = new ArrayList<T>();
- while(rs.next()){
- T o = (T)bean.newInstance();
- for (int i = 0;i < count;i++){
- Object[] param = new Object[]{rs.getObject(field[i])};
- setMethodArray[i].invoke(o,param);
- }
- collection.add(o);
- }
- }
- catch(Exception e){
- throw e;
- }
- finally{
- return collection;//最后返回这个Collection
- }
- }
- }
- 18:50
- 浏览 (1434)
- 评论 (2)
- 分类: Technical Note
- 进入论坛
- 相关推荐
评论
lee5593
2007-04-21
引用
这样必须要column的名字和field的名字一致.如果能改进的话就好了.
如果需要不一致的话,就必须付出额外的代价了,例如XML配置,我个人还是比较推崇简单的惯例优先原则。这段代码是很久以前写的,感谢wangcheng用jdk5.0的新语法进行了简化,这样清爽多了
wangcheng
2007-04-21
学习了一下,如果使用纯jdbc开发的话,是很有用的,但有一个问题,这样必须要column的名字和field的名字一致.如果能改进的话就好了.
把代码简化了一下,呵呵,共同学习
把代码简化了一下,呵呵,共同学习
public static <T> Collection<T> getBeanCollection(T object, ResultSet rs) {
Collection<T> collection = null;
Class clazzT = object.getClass();
Method[] methods = clazzT.getMethods();//获得bean的方法
List<Method> setterMethodList = new ArrayList<Method>();//构造一个List用来存放bean中所有set开头的方法
//获得Bean中所有set方法
for (Method method : methods) {
if (method.getName().startsWith("set")) {
setterMethodList.add(method);
}
}
ResultSetMetaData meta = null;
try {
meta = rs.getMetaData();
//如果记录集中的字段不等于Bean中的属性值,抛出异常
if (setterMethodList.size() != meta.getColumnCount()) {
throw new IllegalArgumentException("传入的JavaBean与ResultSet不一致");
}
//将ResultSet中的每一条记录构建一个JavaBean实例,然后添加到Collection中
collection = new ArrayList<T>();
while (rs.next()) {
T o = (T)clazzT.newInstance();
for (Method m : setterMethodList) {
m.invoke(o, rs.getObject(m.getName().substring(3).toLowerCase()));
}
collection.add(o);
}
} catch (Exception e) {
e.printStackTrace();
// throw e;
}
return collection;//最后返回这个Collection
}
- 浏览: 27445 次

- 详细资料
搜索本博客
最新评论
-
IE7下不同用户会共享同一 ...
问题的根源是浏览器的"TAB机制"引起的, 治本的满足客户的“需求”,应该动浏览 ...
-- by blowfisher -
IE7下不同用户会共享同一 ...
总结下解决办法: 1一种,在后台使用单session针对一个机器(IP),然后 ...
-- by jianfeng008cn -
IE7下不同用户会共享同一 ...
flxi78 写道看来原理决定了实在没有简介的解决方案啊。 不过第一种解决方案, ...
-- by janh -
IE7下不同用户会共享同一 ...
看来原理决定了实在没有简介的解决方案啊。 不过第一种解决方案,还能有简单的方式么 ...
-- by flxi78 -
IE7下不同用户会共享同一 ...
基于这样一种考虑: 在同一窗口的不同页签中用相同的url(包括后面的参数)运行出 ...
-- by janh






评论排行榜