通用的增、删、改和查方法 DAO

 

通用的增、删、改的方法   version 1.0 

public  void  update ( String sql ){
     //1. 获取数据库的连接
    Connection conn  =  null ;
     //2. 创建一个  Statement 对象,用来传送 sql 语句
    Statement st  =  null ;
     try  {
        conn  =  JDBCUtils  . getConnection  ();
        st  =  conn  . createStatement  ();
          //3. 执行 sql  语句
        st  . execute  ( sql  );
     } catch  ( Exception e )  {
          // TODO Auto-generated catch block
        e  . printStackTrace  ();
     } finally  {
          //4. 关闭操作
          if ( st  !=  null ){
              try  {
                st  . close  ();
              }  catch  ( SQLException e  )  {
                  // TODO Auto-generated catch block
                e  . printStackTrace  ();
              }
            
          }
          if ( conn  !=  null ){
              try  {
                conn  . close  ();
              }  catch  ( SQLException e  )  {
                  // TODO Auto-generated catch block
                e  . printStackTrace  ();
              }
            
          }
     }
}

通用的增、删、改的方法 version 2.0 

       public  void  update (  String  sql )  {
            // 1.获取数据库的连接
          Connection  conn  =  null;
            // 2.创建一个Statement对象,用来传送 sql语句
          Statement  st  =  null;
            try  {
              conn  =  JDBCUtils .  getConnection () ;
              st  =  conn .  createStatement () ;
                // 3.执行 sql语句
              st  . executeUpdate (  sql )  ;
            }  catch  ( Exception  e  )  {
              e  . printStackTrace ()  ;
            }  finally  {
                // //4.关闭操作
              JDBCUtils  . close (  null,  st ,  conn  ) ;
            }
       }




通用的增、删、改的方法( version 3.0

     public  void  update ( Connection conn  ,  String sql  ,  Object ...  args )  {
          try  {
            QueryRunner runner  = new QueryRunner ();
            runner  . update  ( conn  ,  sql  ,  args  );
            
          }  catch  ( SQLException e  )  {
            e  . printStackTrace  ();
          }
     }




   使用QueryRunner 

 通用的查询方法,返回一个对象【代码少】

     public  T getInstance  ( Connection conn  ,  String sql  ,  Object ...  args )  {
          try  {
            QueryRunner runner  = new QueryRunner ();
            ResultSetHandler  < T  >  handler  =  new  BeanHandler < T >(  clazz ); //clazz怎么来的?请向下看
              return  runner  . query  ( conn  ,  sql  ,  handler  ,  args );
          }  catch  ( Exception e  )  {
            e  . printStackTrace  ();
          return  null ;
     }



 通用的查询方法,返回多个对象【代码少】

MapListHandler 】

          public  List  < T  >  getForList1  ( Connection conn  ,  String sql ,  Object ...  args )  {
             QueryRunner runner  = new  QueryRunner  ();
              try  {
                  ResultSetHandler  < List  < Map  < String  ,  Object >>> handler =  new  MapListHandler  ();
                    List  < Map  < String  ,  Object  >> map  =  runner . query (  conn ,  sql ,  handler );
                     return  ( List  < T  >)  map  ;
              }  catch  ( Exception e  )  {
                e  . printStackTrace  ();
              }
            
              return  null ;
            
          }


BeanListHandler

      public  List  < T  >  getForList2  ( Connection conn  ,  String sql ,  Object ...  args  )   {
         QueryRunner runner  =  new  QueryRunner  ();
          try   {
            
            ResultSetHandler  < List  < T  >>  handler  =  new  BeanListHandler <  T >(  clazz  );
            List  < T  > list  = runner  . query  ( conn  ,  sql  ,  handler  );
              return  list  ;
          }   catch   ( Exception e  )   {
            e  . printStackTrace  ();
          }
          return   null ;
    
      }

此处的clazz来自于--->
public   class  DAO  < T  >   {
    Class  < T  >  clazz  =   null  ;

      public  DAO  ()   {
          //  此处的 this  相当于正在创建的  customerDAO  对象
        clazz  =  ReflectionUtils .  getSuperClassGeneric  ( this  . getClass  ());
      }

此处的ReflectionUtils来自于--->
class  ReflectionUtils  {
      // 如何获取形参  clazz  的父类的泛型
      public   static  Class getSuperClassGeneric  ( Class clazz  )   {
        Type t  =  clazz  . getGenericSuperclass  ();
        ParameterizedType type  =   ( ParameterizedType  )  t  ;
        Type  []  types  =  type  . getActualTypeArguments  ();
          return   ( Class  )  types  [  0 ];
      }
}



查询某些特殊数值的数据

     public  < E >  E getValue1  ( Connection conn  , String sql , Object  ...  args ){

          try  {
            ResultSetHandler  < Object  > handler  = new  ScalarHandler ();
            QueryRunner runner  = new  QueryRunner  ();
            Object obj  = runner  . query  ( conn  ,  sql  ,  handler  ,  args );
            
              return  ( E  )  obj  ;
          }  catch  ( Exception e  )  {
    
            e  . printStackTrace  ();
          }
        
          return  null ;
     }



之前的查询方法(代码量大)


      //  通用的查询方法,返回一个对象
    public T getInstance (Connection conn , String sql , Object... args) {
        PreparedStatement ps = null;
        ResultSet rs = null;
        T t = null;
         try {
            ps = conn .prepareStatement (sql );
             for (int i = 0; i < args.length; i++) {
                ps .setObject (i + 1, args[i]);
             }
            rs = ps .executeQuery ();
            ResultSetMetaData rsmd = rs .getMetaData ();
             int columnCount = rsmd .getColumnCount ();
            t = null;
             if (rs .next ()) {
                t = clazz .newInstance ();
                 for (int i = 0; i < columnCount; i++) {
                    Object columnVal = rs .getObject (i + 1);
                    String columnLabel = rsmd.getColumnLabel( i + 1);
                    PropertyUtils .setProperty (t , columnLabel, columnVal);
                 }
             }

         } catch (Exception e ) {
            e .printStackTrace ();
         } finally {
            JDBCUtils .close (rs , ps , null);
         }
         return t ;
    }


   //通用的查询方法,返回一个包含多个对象的集合(练习)
       public  List <  T >  getForList ( Connection  conn ,  String  sql ,  Object  ...  args  )  {
          PreparedStatement  ps  =  null;
          ResultSet  rs  =  null;
          List  < T >  list  =  null ;
            T  t  =  null;
            try  {
              ps  =  conn .  prepareStatement ( sql  ) ;
                for  ( int  i  =  0 ;  i  <  args .  length ;  i  ++ )  {
                   ps  . setObject ( i  +  1 ,  args  [ i  ]) ;
                }
              rs  =  ps .  executeQuery () ;
              ResultSetMetaData  rsmd  =  rs . getMetaData  () ;
                int  columnCount  =  rsmd  . getColumnCount ()  ;
              t  =  null ;
              list  =  new  ArrayList <  T > () ;
                while  ( rs .  next ())  {
                   t  =  clazz  . newInstance ()  ;
                     for  ( int  i  =  0 ;  i  <  columnCount ;  i ++ )  {
                        Object  columnVal  =  rs . getObject  ( i  +  1 ) ;
                        String  columnLabel  =  rsmd . getColumnLabel (  i  +  1  ) ;
                        PropertyUtils  . setProperty (  t ,  columnLabel ,  columnVal ) ;
                     }
                   list  . add ( t ) ;
                }
            }  catch  ( Exception  e  )  {
              e  . printStackTrace ()  ;
            }  finally  {
              JDBCUtils  . close (  rs ,  ps  ,  null  ) ;
            }

            return  list ;
       }







你可能感兴趣的:(通用的增、删、改和查方法 DAO)