日期:2014-05-16 浏览次数:20567 次
JdbcTemplate = new JdbcTemplate(datasource);   
jdbcTemplate.execute(new CallBack(){   
            public CallbackInterfacedoInAction(){   
               ......   
               //用户定义的代码或者说Spring替我们实现的代码   
            }   
}  
    JdbcTemplate = new JdbcTemplate(datasource);
    jdbcTemplate.execute(new CallBack(){
                public CallbackInterfacedoInAction(){
                   ......
                   //用户定义的代码或者说Spring替我们实现的代码
                }
    }public Object execute(ConnectionCallback action) throws DataAccessException {   
    //这里得到数据库联接   
    Connection con = DataSourceUtils.getConnection(getDataSource());   
    try {   
        Connection conToUse = con;   
        //有些特殊的数据库,需要我们使用特别的方法取得datasource   
        if (this.nativeJdbcExtractor != null) {   
            // Extract native JDBC Connection, castable to OracleConnection or the like.   
            conToUse = this.nativeJdbcExtractor.getNativeConnection(con);   
        }   
        else {   
            // Create close-suppressing Connection proxy, also preparing returned Statements.   
            conToUse = createConnectionProxy(con);   
        }   
    //这里调用的是传递进来的匿名类的方法,也就是用户程序需要实现CallBack接口的地方。   
        return action.doInConnection(conToUse);   
    }   
    catch (SQLException ex) {   
        //如果捕捉到数据库异常,把数据库联接释放,同时抛出一个经过Spring转换过的Spring数据库异常,   
        //我们知道,Spring做了一个有意义的工作是把这些数据库异常统一到自己的异常体系里了。   
        DataSourceUtils.releaseConnection(con, getDataSource());   
        con = null;   
        throw getExceptionTranslator().translate("ConnectionCallback", getSql(action), ex);   
    }   
    finally {   
        //最后不管怎样都会把数据库连接释放   
        DataSourceUtils.releaseConnection(con, getDataSource());   
    }   
}  
    public Object execute(ConnectionCallback action) throws DataAccessException {
        //这里得到数据库联接
        Connection con = DataSourceUtils.getConnection(getDataSource());
        try {
            Connection conToUse = con;
            //有些特殊的数据库,需要我们使用特别的方法取得datasource
            if (this.nativeJdbcExtractor != null) {
                // Extract native JDBC Connection, castable to OracleConnection or the like.
                conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
            }
            else {
                // Create close-suppressing Connection proxy, also preparing returned Statements.
                conToUse = createConnectionProxy(con);
            }
        //这里调用的是传递进来的匿名类的方法,也就是用户程序需要实现CallBack接口的地方。
            return action.doInConnection(conToUse);
        }
        catch (SQLException ex) {
            //如果捕捉到数据库异常,把数据库联接释放,同时抛出一个经过Spring转换过的Spring数据库异常,
            //我们知道,Spring做了一个有意义的工作是把这些数据库异常统一到自己的异常体系里了。
            DataSourceUtils.releaseConnection(con, getDataSource());
            con = null;
            throw getExceptionTranslator().translate("ConnectionCallback", getSql(action), ex);
        }
        finally {
            //最后不管怎样都会把数据库连接释放
            DataSourceUtils.releaseConnection(con, getDataSource());
        }
    }public Object query(PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor rse)   
        throws DataAcc