转载地址:http://yjck.iteye.com/blog/1221160
public List<Object> getList(String sql,Object[] params,Object obj){
ResultSet rs = null;
if(params == null){
rs = this.getRs(sql);
}else{
rs = this.getRs(sql, params);
}
List<Object> list = new ArrayList<Object>();
try {
while(rs.next()){
int i = 1;
Object inst = obj.getClass().newInstance();
Field[] fields = inst.getClass().getDeclaredFields();
for(Field field : fields){
String setStr = field.getName().substring(0, 1).toUpperCase();
String setMehtodName = "set"+setStr+field.getName().substring(1);
Method setMethod = obj.getClass().getMethod(setMehtodName, new Class[]{field.getType()});
setMethod.invoke(inst, new Object[]{rs.getString(i)});
i++;
}
list.add(inst);
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return list;
}
大概解释下:获得ResultSet后,将其封装成LIST集合,hibernate中可以直接获得,当然,我并没有看hibernate中是如何实现的,我这里只是我的一个实现,需要有一些限制条件。
1.获得bean对象就是这里的inst;
2.获得bean对象的所有field域,就是定义的那些字段;
3.构造每个字段的set方法名称;
4.将从Resultset中拿出来的结果set到Bean对象中
5.将bean对象放到List集合中
6.return List集合
限制条件:要保证Bean对象的顺序和写的查询语句查出的每个字段顺序一致,不然,就张冠李戴了!