zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    [c++]在类中定义常量的几个做法
    VC6中使用高版本系统API的方法
    Delphi编程中实现窗口分割
    Win32 SDK窗口程序代码(含详细注释)
    [c++]在C++中定义常量的两种方法的比较
    VC6里的_WIN32_WINNT宏
    [VC]自己实现TRACE功能
    [delphi]保证程序只运行一个实例
    转载:C# 设置文件夹权限(代码简单)
    VC:动态链接库
  • 原文地址:https://www.cnblogs.com/1960366876tZ/p/9164776.html
Copyright © 2011-2022 走看看