浏览 3908 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-21
前段时间写一个RSS聚合系统,需要大量用到从数据库中将表中符合条件的记录取出来生成相应的javabean的集合,于是结合泛型和反射机制写了一个较通用的封装类。源代码如下: java 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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的新语法进行了简化,这样清爽多了 |
|
返回顶楼 | |