JdbcTemplate是spring对jdbc的封装,提供了操作数据库的模板。
类图
类图分析:
- JdbcOperations接口:定义了JdbcTemplate可以使用的JDBC操作集合。从查询到更新都进行了声明。
- JdbcAccessor抽象类:主要为子类提供了一些公用属性声明。
- DataSource:Spring数据访问层对数据库资源的访问,全都建立在
javax.sql.DataSource
标准接口之上。DataSource可以看做JDBC的连接工厂。 - SQLExceptionTranslator:负责Spring对SQLException的转译。实现了SQLException到其统一的数据访问异常体系的转换。
- DataSource:Spring数据访问层对数据库资源的访问,全都建立在
JdbcTemplate主要是通过 模板方法模式 对基于JDBC的数据访问代码进行统一封装。
源码分析
一般我们都是通过xml文件配置spring的JDBC,配置如下:
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
由JdbcTemplate的源码,可知上述配置是在初始化数据源:
1 | public JdbcTemplate(DataSource dataSource) { |
在设置好了数据源后,就可以进行相应的JDBC操作,下面以query
方法进行源码分析。
query源码
1 | public <T> T query(final String sql, final ResultSetExtractor<T> rse) throws DataAccessException { |
功能分析:
在方法中,定义了一个内部类,实现了StatementCallback接口
和SqlProvider接口
,然后声明一个匿名类参数传递给execute()
方法。
execute源码
1 | public <T> T execute(StatementCallback<T> action) throws DataAccessException { |
方法分析:
上述方法为模板方法模式 的典型应用。实现了数据库的操作。与一般的模板方法模式
不一样的是,JdbcTemplate实现的方式是通过回调(CallBack)
。这种实现方法避免了每次使用JdbcTemplate的时候都需要进行子类化。