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


    实例讲解

     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     }

  • 相关阅读:
    Java 入门 9 Random 类 随机数
    Java 入门16 面向对象实现之前的小案例购物车
    Java 入门10 java的内存分配,数组内存图( 方法区 栈内存 堆内存)
    JAVA 12 联系回顾之前知识
    Java 13 面向对象的编程 小案例 实现购物车
    面试泛型
    面试反射
    从HashMap的执行流程开始 揭开HashMap底层实现
    面试什么是面向对象?面向对象三大特性?
    面试JMM内存模型
  • 原文地址:https://www.cnblogs.com/ztt0918/p/8515294.html
Copyright © 2020-2023  润新知