Result映射成对象和List
package com.com.dbhelper; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Manager { public static List toList(ResultSet rs) throws SQLException { List list = new ArrayList(); ResultSetMetaData md = rs.getMetaData(); int columnCount = md.getColumnCount(); while (rs.next()) { Map rowData = new HashMap(); for (int i = 1; i <= columnCount; i++) { rowData.put(md.getColumnName(i), rs.getObject(i)); } list.add(rowData); } return list; } public static List resultSetToList(ResultSet rs,Class cls) { List list = new ArrayList(); try { //获取数据库表结构 ResultSetMetaData meta=rs.getMetaData(); Object obj=null; while(rs.next()) { //获取formbean实例对象 obj=Class.forName(cls.getName()).newInstance(); //循环获取指定行的每一列的信息 for(int i=1;i<=meta.getColumnCount();i++) { //当前列名 String colName=meta.getColumnName(i); //将列名第一个字母大写(为什么加+""呢?为了把char类型转换为String类型。replace的参数是String类型。) colName=colName.replace(colName.charAt(0)+"", new String(colName.charAt(0)+"").toUpperCase()); //设置方法名 String methodName="set"+colName; //获取当前位置的值,返回Object类型 Object value=rs.getObject(i); //利用反射机制,生成setXX()方法的Method对象并执行该setXX()方法。 Method method=obj.getClass().getMethod(methodName, value.getClass()); method.invoke(obj, value); } list.add(obj); } }catch(Exception ex) { ex.printStackTrace(); }finally{ return list; } } //将查询结果的第一条数据转换为指定类型的对象 public static <T> T parseResultSet(ResultSet rs,Class<T> cls) { try { //只会将查询的第一天数据转换为对象 if (rs.next()) { //实例化对象 T obj = cls.newInstance(); //获取类中所有的属性 Field[] arrf = cls.getDeclaredFields(); //遍历属性 for (Field f : arrf) { //设置忽略访问校验 // f.setAccessible(true); // 为属性设置内容 f.set(obj, rs.getObject(f.getName())); } return obj; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static <T> List<T> parseResultSetAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(f.getName())); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static <T> List<T> parseRSAll(ResultSet rs,Class<T> cls) { try { List<T> list=new ArrayList<>(); //将查询的所有数据转换为对象添加到集合 while(rs.next()){ //实例化对象 T obj=cls.newInstance(); //获取类中所有的属性 Field[] arrf=cls.getDeclaredFields(); //遍历属性 for(Field f:arrf){ //记录属性名称 String name=f.getName(); //获取当前属性上面的注解对象 Col fn=f.getAnnotation(Col.class); if(fn!=null){ name=fn.value();//获取注解的内容 } //设置忽略访问校验 f.setAccessible(true); //为属性设置内容 f.set(obj, rs.getObject(name)); } list.add(obj);//添加到集合 } return list; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }