浏览 1695 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-04-21 关键字: Generics
前段时间写一个RSS聚合系统,需要大量用到从数据库中将表中符合条件的记录取出来生成相应的javabean的集合,于是结合泛型和反射机制写了一个较通用的封装类。源代码如下: java 代码
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间: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
}
|
|
| 返回顶楼 | |
|
时间:2007-04-21
引用 这样必须要column的名字和field的名字一致.如果能改进的话就好了.
如果需要不一致的话,就必须付出额外的代价了,例如XML配置,我个人还是比较推崇简单的惯例优先原则。这段代码是很久以前写的,感谢wangcheng用jdk5.0的新语法进行了简化,这样清爽多了 |
|
| 返回顶楼 | |



