使用泛型封装结果集ResultSet遍历成List集合

2018/03/06 16:55
阅读数 116

 

实例讲解

 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     }

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部