实例讲解
1 public <T> List<T> findModelListBySqlAndParam(String sql,List<Object> param,T t) throws Exception{ 2 //定义一个集合来存放需要转成的对象集合 3 List<T> list=new ArrayList<T>(); 4 //获取当前类 5 Class<?> c=t.getClass();//泛型的反射机制(?问号可写可不写)java.lang.reflect 6 //遍历结果集,封装成外界用户所需要的对象集合 7 //1>获取结果集 8 ResultSet rs=executeQuery(sql, param); 9 //2>开始遍历 10 while(rs.next()){ 11 //初始化对象 12 @SuppressWarnings("unchecked") 13 T obj= (T)c.newInstance(); 14 //获取当前类一共多少个属性啊 15 Field[] fields=c.getDeclaredFields(); 16 for(Field f:fields){ 17 //获取当前属性的属性名子 18 String fname=f.getName(); 19 //获取当前的属性的类型(简称) java.lang.String 20 String type=f.getType().getSimpleName(); 21 22 //***************** 取出来当前属性对应的数据库的值了 **************** 23 //在此方法名中要求类的属性名和数据库的字段名相同 24 Object value=null; 25 if(type.equalsIgnoreCase("string")){ 26 value=rs.getString(fname); 27 }else if(type.equalsIgnoreCase("int")){ 28 value=rs.getInt(fname); 29 }else if(type.equalsIgnoreCase("Integer")){ 30 value=rs.getInt(fname); 31 }else if(type.equalsIgnoreCase("Double")){ 32 value=rs.getDouble(fname); 33 }else if(type.equalsIgnoreCase("Float")){ 34 value=rs.getFloat(fname); 35 }else if(type.equalsIgnoreCase("date")){ 36 value=rs.getDate(fname); 37 }else if(type.equalsIgnoreCase("long")){ 38 value=rs.getLong(fname); 39 } 40 //***************** 将取出来当前属性的值设置给当前对象obj**************** 41 //1>获取当前对象的所有set方法,并找到当前取出来的属性对应的set方法 42 Method[] methods=c.getDeclaredMethods();//获取所有的方法 43 for(Method m:methods){ 44 //获取当前方法名 45 String methodName=m.getName(); 46 //判断是不是当前属性 47 if(methodName.equalsIgnoreCase("set"+fname)){ 48 //执行该方法 49 m.invoke(obj, value); 50 } 51 } 52 } 53 list.add(obj); 54 } 55 return list; 56 }