收藏 分享(赏)

Spring源码阅读:Spring JDBC 组件的设计与实现.docx

上传人:11xg27ws 文档编号:7860247 上传时间:2019-05-27 格式:DOCX 页数:11 大小:88.74KB
下载 相关 举报
Spring源码阅读:Spring JDBC 组件的设计与实现.docx_第1页
第1页 / 共11页
Spring源码阅读:Spring JDBC 组件的设计与实现.docx_第2页
第2页 / 共11页
Spring源码阅读:Spring JDBC 组件的设计与实现.docx_第3页
第3页 / 共11页
Spring源码阅读:Spring JDBC 组件的设计与实现.docx_第4页
第4页 / 共11页
Spring源码阅读:Spring JDBC 组件的设计与实现.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、 昨天回忆了我在学习 JDBC 时自己设计的JDBCTemplate(写在上一篇博客中),在使用 Spring 过程中,有时会用到 Spring 给我们提供的 JdbcTemplate,这里看看 Spring 是如何实现这个组件的。在使用 Spring JDBC 是你要做的工作很少:从上面的图上可以看出来,使用 Spring JDBC,你只需要做四个工作:1)定义连接参数:也就是定义 url,driver,user,password 这个几个参数,一般我们会用一个 jdbc.properties 文件来配置。2)指定要执行那个 sql 语句:项目中要用到什么样的 SQL 语句,Spring 是

2、肯定不知道的,只能我们自己设置的。3)使用 PreparedStatement 时需要参数,传递哪些参数肯定也是需要我们自己设置的。4)迭代结果集的过程需要做那些事情,肯定也是需要我们自己写的。之前我定义的 JDBCTemplate 需要做的工作有:1)配置连接参数2)指定 sql 语句3)传递参数4)处理结果集综合来看,两者功能是类似的,但是我定义的那个处理能力是有限,例如处理存储过程的方式并没有一个特定的模板。而在Spring 中定义的,是一个可用性很好的组件。根据名称就知道它也是使用了模板方法模式,那么它是如何实现的呢?又提供了哪些模板呢?如何使用 JdbcTemplate先来复习一下,

3、如何使用 Spring JDBC 组件。在 Dao 层是这样使用 JdbcTemplate 的:Repositorypublic class JdbcCorporateEventDao implements CorporateEventDao private JdbcTemplate jdbcTemplate;Autowiredpublic void setDataSource(DataSource dataSource) this.jdbcTemplate = new JdbcTemplate(dataSource);/ JDBC-backed implementations of the

4、methods on the CorporateEventDao follow.与上面的使用关联的 Spring Bean Definition 是: 在 Java 代码中只需要指定相应的 DataSource,就可以获取到 JdbcTemplate 对象了。 JdbcTemplate 说明JdbcTemplate 作为 Spring JDBC 组件的核心类,很有必要来看看它是如何实现的。View Code1)这个类是 Spring JDBC core 包的主要类。通过上面的说明,可以对 JdbcTemplate 有个初步的了解:2)这个类简化了 JDBC 的使用,有利于避免一些常见的错误。3

5、)它能够执行 JDBC 的流程,并且能够将 SQL 的提供和结果的处理分离。(其实就是说由用户来提供 SQL 语句,和结果处理)4)它能够执行 SQL 的 executeQuery,executeUpdate (这两个是 Statement、PreparedStatement 的方法),能够初始化 ResultSet 的迭代器。5)能够帮助我们捕获异常6)使用这个类编码时,只需要实现相应的 callback 接口就行了。常用的接口有:PreparedStatementCreator、ResultSetExtractor 、PreparedStatementSetter、RowMapper7)可

6、以通过在 appliction contex 中配置 DataSource 来直接获取 JdbcTemplate 对象。8)如果想要使用 log4j 等来记录日志信息,需要设置:log4j.logger.org.springframework.jdbc.core.JdbcTemplate=debugJdbcTemplate 的结构通过上面的类图,就可以了解到:1)JdbcTemplate 通过继承 JdbcAccessor,可以从 Spring IOC 中获取到 DataSource.DataSource 是用户在 Bean 定义文件中配置的。2)JdbcOperations 为 JdbcTe

7、mplate 提供了一些标准的操作接口。接口中的方法都为用户操作数据库提供了极大的便利。3)JdbcTemplate 使用 NativeJdbcExtractor 用于从各种不同的 JDBC 厂商或者数据库连接池获取Connection、Statem、ResultSet 等,这个类在JdbcTemplate 提供的模板方法内部使用。JdbcTemplate 提供的模板通过对 JdbcTemplate 提供的那些方便的方法的浏览,发现了这些方法共同特点是都是用来 execute 方法。再查看 execute方法,发现了 JdbcTemplate 根据 JDBC 中的 Statement 的分类,

8、提供了三种 execute:Statement 语句模板:public T execute(StatementCallback action)CallableStatement 语句模板:public T execute(CallableStatementCreator csc, CallableStatementCallback action)PreparedStatement 语句模板:public T execute(PreparedStatementCreator psc, PreparedStatementCallback action)/ 附加一种,这种很少用到public T e

9、xecute(ConnectionCallback action)根据这几个模板就可以看出来,它也是采用了使用 Callback的 TemplateMethod 模式。接下来,分别了解他们是如何实现的: Statement 语句模板View Code看来这三步的操作要在 StatementCallback 中来完成了。这个模板方法中对使用 JDBC 的流程都走了一遍。连接的获取、打开、关闭、方法的调用、异常的处理都设计到了,没有完善的有:SQL 的设定、执行,结果的处理。在 JdbcTemplate 中找一个使用了这个模板的例子:View Code从这个方法可以看出来,SQL 语句确实由我们提

10、供,这个模板是在执行 SQL 操作时才指定 SQL 语句。这个使用没有对结果的处理 再看查询的例子:View Code这个例子,就是包括自定义结果处理的模板使用。如果我们使用这个方法,处理 ResultSet 时,还得自己写结果集迭代器。JdbcTemplate 中还提供了一种更简洁的方式: View CodePreparedStatement 语句模板 View Code在使用 PreparedStatement 可能会用到的类有: PreparedStatementCreator:用于指定 SQL 语句PreparedStatementSetter:用于给 SQL 语句中的参数赋值指定 S

11、QL:private static class SimplePreparedStatementCreator implements PreparedStatementCreator, SqlProvider private final String sql;public SimplePreparedStatementCreator(String sql) Assert.notNull(sql, “SQL must not be null“);this.sql = sql;public PreparedStatement createPreparedStatement(Connection co

12、n) throws SQLException return con.prepareStatement(this.sql);public String getSql() return this.sql;设置参数,也是通过遍历参数数组的方式:public void setValues(PreparedStatement ps) throws SQLException if (this.args != null) for (int i = 0; i this.args.length; i+) Object arg = this.argsi;doSetValue(ps, i + 1, arg);这两个操作都是在内部类中实现的。CallableStatement 语句模板View Code这个看起来和前两个有什么不同吗? 接下来看看 JdbcTemplate 中的其他方法:他们都是在这几个模板方法的基础上对回调接口给出的部分实现而已。文章整理:融天下 p2p 网贷系统

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报