快速业务通道

Spring源代码解析(三):Spring JDBC - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

Spring源代码解析(三):Spring JDBC

时间:2011-03-29 javaeye jiwenke

下面我们看看Spring JDBC相关的实现,

在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数据库,在 JdbcTemplate为用户程序提供了许多便利的数据库操作方法,比如查询,更新等,而且在 Spring中,有许多类似 JdbcTemplate的模板,比如HibernateTemplate等等 - 看来这是 Rod.Johnson的惯用手法,一般而言这种Template中都是通过回调函数CallBack类的使用 来完成功能的,客户需要在回调接口中实现自己需要的定制行为,比如使用客户想要用的 SQL语句等。不过往往Spring通过这种回调函数的实现已经为我们提供了许多现成的方法 供客户使用。一般来说回调函数的用法采用匿名类的方式来实现,比如:

代码

JdbcTemplate = new JdbcTemplate(datasource); jdbcTemplate.execute(new CallBack(){        public CallbackInterfacedoInAction(){         ......         //用户定义的代码或者说Spring替我们实现的代码        } }

在模板中嵌入的是需要客户化的代码,由Spring来作或者需要客户程序亲自动手完成 。下面让我们具体看看在JdbcTemplate中的代码是怎样完成使命的,我们举 JdbcTemplate.execute()为例,这个方法是在JdbcTemplate中被其他方法调用的基本方法 之一,客户程序往往用这个方法来执行基本的SQL语句:

代码

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());    } }

Spring源代码解析(三):Spring JDBC(2)

时间:2011-03-29 javaeye jiwenke

对于JdbcTemplate中给出的其他方法,比如query,update,execute等的实现,我们看 看query():

代码

public Object query(PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor rse)      throws DataAccessException {    ..........    //这里调用了我们上面看到的execute()基本方法,然而这里的回调实现是Spring 为我们完成的查询过程    return execute(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号