JSP底层方法的封装

之前在写JSP三层代码的时候,封装了一个BaseDao的工具类,包含executeQuery()方法、executeUpdate()方法。每个Dao层的方法都会把结果集进行再次的封装,为了减轻代码的冗余,就对这些方法进行的封装,并且根据模型直接返回一个结果集。

    public  <T> List<T>  findModelListBySqlAndParam(String sql,List<Object> param,T t)  {
        //定义一个集合来存放需要转成的对象集合
        List<T> list=new ArrayList<T>();
        //获取当前类
        Class<?> c=t.getClass();
        //遍历结果集,封装成外界用户所需要的对象集合
        //1>获取结果集
        ResultSet rs=executeQuery(sql, param);
        //2>开始遍历
        try {
            while(rs.next()){
                //初始化对象
                T obj= (T)c.newInstance();
                //获取当前类一共多少个属性啊
                Field[] fields=c.getDeclaredFields();
                for(Field f:fields){
                    //获取当前属性的属性名子
                    String fname=f.getName();
                    //获取当前的属性的类型(简称)  java.lang.String
                    String type=f.getType().getSimpleName();

                    //*****************  取出来当前属性对应的数据库的值了 ****************
                    Object value=null;
                    if(type.equalsIgnoreCase("string")){
                        value=rs.getString(fname);
                    }else if(type.equalsIgnoreCase("int")){
                        value=rs.getInt(fname);
                    }else if(type.equalsIgnoreCase("Integer")){
                        value=rs.getInt(fname);
                    }else if(type.equalsIgnoreCase("Double")){
                        value=rs.getDouble(fname);
                    }else if(type.equalsIgnoreCase("Float")){
                        value=rs.getFloat(fname);
                    }else if(type.equalsIgnoreCase("date")){
                        value=rs.getDate(fname);
                    }else if(type.equalsIgnoreCase("long")){
                        value=rs.getLong(fname);
                    }
                    //*****************  将取出来当前属性的值设置给当前对象obj****************
                    //1>获取当前对象的所有set方法,并找到当前取出来的属性对应的set方法
                    Method[] methods=c.getDeclaredMethods();
                    for(Method m:methods){
                        //获取当前方法名
                        String methodName=m.getName();
                        //判断是不是当前属性
                        if(methodName.equalsIgnoreCase("set"+fname)){
                            //执行该方法
                            m.invoke(obj, value);
                        }
                    }
                }
                list.add(obj);
                
            }
        }  catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }

 

posted @ 2018-06-10 22:33  长亭一抹斜阳  阅读(260)  评论(0编辑  收藏  举报