Spring框架之jdbc源码彻底解析

Spring框架之jdbc源码彻底解析html

       Spring JDBC抽象框架所带来的价值将在如下几个方面得以体现:java

       一、指定数据库链接参数web

       二、打开数据库链接算法

       三、声明SQL语句spring

       四、预编译并执行SQL语句sql

       五、遍历查询结果(若是须要的话)数据库

       六、处理每一次遍历操做数组

       七、处理抛出的任何异常缓存

       八、处理事务安全

       九、关闭数据库链接

       使用了Spring JDBC抽象框架以后,应用开发人员只须要作步骤3(声明SQL语句)和步骤6(处理每一次遍历操做)的编码工做。Spring将替咱们完成全部单调乏味的JDBC底层细节处理工做。

       Spring JDBC抽象框架由五个包构成:config、core、 dataSource、object以及support。

       org.springframework.jdbc.config包负责JDBC的配置。

       org.springframework.jdbc.core包由JdbcTemplate类以及相关的回调接口(callback interface)和类组成。

       org.springframework.jdbc.datasource包由一些用来简化DataSource访问的工具类,以及各类DataSource接口的简单实现(主要用于单元测试以及在J2EE容器以外使用JDBC)组成。工具类提供了一些静态方法,诸如经过JNDI获取数据链接以及在必要的状况下关闭这些链接。它支持绑定线程的链接,好比被用于DataSourceTransactionManager的链接。

       org.springframework.jdbc.object包由封装了查询、更新以及存储过程的类组成,这些类的对象都是线程安全而且可重复使用的。它们相似于JDO,与JDO的不一样之处在于查询结果与数据库是“断开链接”的。它们是在org.springframework.jdbc.core包的基础上对JDBC更高层次的抽象。

       org.springframework.jdbc.support包提供了一些SQLException的转换类以及相关的工具类。

       在JDBC处理过程当中抛出的异常将被转换成org.springframework.dao包中定义的异常。所以使用Spring JDBC进行开发将不须要处理JDBC或者特定的RDBMS才会抛出的异常。全部的异常都是unchecked exception,这样咱们就能够对传递到调用者的异常进行有选择的捕获。

       下面基于的Spring版本为5.2.4.BUILD-SNAPSHOT源码,对JDBC模块中包含的类和接口进行分析。

1、 jdbc/

1.1  BadSqlGrammarException:sql语法异常。该异常类的子类能够表示没有这种表格、没有这种列等状况。

1.2  CannotGetJdbcConnectionException:当咱们使用JDBC没法链接到数据库时抛出的致命异常。

1.3  IncorrectResultSetColumnCountException:当结果集(result set)的列数目不对时抛出的异常,好比,指望获得的是单列,可是sql语句查询的结果是0列或者多列。

1.4  InvalidResultSetAccessException:当以无效的方式去访问结果集(ResultSet)时抛出的异常,好比结果集列索引无效。

1.5  JdbcUpdateAffectedIncorrectNumberOfRowsException:当JDBC更新操做影响了指望范围以外的几行记录时抛出的异常。好比咱们对单独的一行数据执行更新操做,可是却影响了其余几行。

1.6  LobRetrievalFailureException:LOB没法被获取的时候抛出此类异常。

       因为无结构的数据每每都是大型的,存储量很是大,而LOB(large object ,大对象,一个LOB字段可存储可多达4GB的数据)类型主要用来支持无结构的大型数据。用户能够用LOB数据类型来存储大型的无结构数据,特别是文本,图形,视频和音频等多媒体数据。

       LOB数据类型能够分为如下几种:

       BLOB:二进制LOB类型,用户存放无结构的二进制数据,最大4GB  binary 二进制。

       CLOB:字符LOB类型,用于存放字符数据,最大能够存储4GB。

       NLOB:字符LOB类型,和CLOB相同,支持国家字符集,多字符集 GBK。

       BFILE:二进制文件类型,与数据库外的操做系统文件相关联,该文件存储二进制大对象。

1.7  SQLWarningException:当咱们不忽略SQLWarnings警告时抛出的异常。

       当操做完成时出现SQLWarnings警告,若是咱们对这个警告不满意能够将其进行回滚。固然咱们也能够忽略这个警告,或者仅仅记录下来,或者以SQLWarningException的形式封装并抛出。

1.8  UncategorizedSQLException:未分类的SQL异常,当咱们没法将一个SQLException归类到某一种通用的异常时抛出此异常。

2、jdbc/config

2.1  DatabasePopulatorConfigUtils:内部方法,用于JDBC配置。

2.2  EmbeddedDatabaseBeanDefinitionParser:继承了AbstractBeanDefinitionParser,解析<embedded-database>元素,并使用EmbeddedDatabaseFactoryBean建立一个BeanDefinition。

2.3  InitializeDatabaseBeanDefinitionParser:继承了AbstractBeanDefinitionParser,解析<initialize-database>元素,建立一个DataSourceInitializer类型的BeanDefinition。

2.4  JdbcNamespaceHandler:JDBC 配置的命名空间处理器。

2.5  SortedResourcesFactoryBean:FactoryBean接口的实现类,获取一列地区字符串,建立排序的一组资源实例。

3、jdbc/core/

3.1  ArgumentPreparedStatementSetter:继承自PreparedStatementSetter,应用一组给定的参数。

       PreparedStatementSetter接口充当JdbcTemplate类使用的通常回调接口。该接口在JdbcTemplate类提供的PreparedStatement上设置了使用相同SQL的批处理中的每一个更新的值。实现负责设置必要的参数。

       PreparedStatement接口继承自Statement,PreparedStatement可使用占位符,是预编译的,批处理比Statement效率高  。Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。

       Statement接口用于执行静态 SQL 语句并返回它所生成结果的对象。

3.2  ArgumentTypePreparedStatementSetter:继承自PreparedStatementSetter,应用一组给定的参数和JDBC参数类型。

3.3  BatchPreparedStatementSetter:批量更新回调接口,被JdbcTemplate类使用。

3.4  BatchUpdateUtils:批量更新的功能性方法。主要在框架内部使用。

3.5  BeanPropertyRowMapper:能够将查询的ResultSet和实体类的字段进行自动映射

3.6  CallableStatementCallback:回调接口,用于操做一个CallableStatement。容许在单个CallableStatement执行任意数量的操做。好比,能够执行单次的调用,也可使用不一样参数执行屡次调用。

3.7  CallableStatementCreator:三个核心回调接口中的一个,被JdbcTemplat类使用。该接口用于建立一个CallableStatement。实现类负责提供SQL和必要的参数。

3.8  CallableStatementCreatorFactory:基于一个SQL statement的不一样参数和一组参数的声明,来高效的建立多个CallableStatementCreator对象。

3.9  ColumnMapRowMapper:RowMapper接口的实现类,为每一行建立一个Map,用key-value键值对表示全部的列元素:做为每个列元素的入口,列名字做为key。

3.10  ConnectionCallback:操做JDBC链接的通用回调接口,运行在单个链接上执行任意数量的操做,使用任何类型和数量的Statements。

3.11  DisposableSqlTypeValue:SqlTypeValue的子接口,增长了一个cleanup回调函数,当value值已经设置好,相应的statement已经执行完毕后该回调函数被调用。

3.12  InterruptibleBatchPreparedStatementSetter:继承自BatchPreparedStatementSetter,增长了批量操做耗尽的检查,也就是说判断批量操做是否完成。

3.13  JdbcOperations:JdbcOperations接口定义了JDBC的一些基本操做,具体实现则放在JdbcTemplate类中,不推荐直接使用,可是因为比较适合于mock和stub,所以在测试的时候是一个很是好的选择。

3.14  JdbcTemplate:JdbcTemplate是core包的核心类。它替咱们完成了资源的建立以及释放工做,从而简化了咱们对JDBC的使用。它还能够帮助咱们避免一些常见的错误,好比忘记关闭数据库链接。JdbcTemplate完成JDBC核心处理流程,好比SQL语句的建立、执行,而把SQL语句的生成以及查询结果的提取工做留给咱们的应用代码。它能够完成SQL查询、更新以及调用存储过程,能够对ResultSet进行遍历并加以提取。它还能够捕获JDBC异常并将其转换成org.springframework.dao包中定义的通用的、信息更丰富的异常。

  JdbcTemplate主要提供如下三种类型的方法:

       一、executeXxx() : 执行任何SQL语句,对数据库、表进行新建、修改、删除操做;

       二、updateXxx() : 执行新增、修改、删除等语句;

       三、queryXxx() : 执行查询相关的语句。

3.15  ParameterDisposer:该接口的实现类用来关闭参数(好比SqlLobValue对象)所分配的资源。

3.16  ParameterizedPreparedStatementSetter:参数化的回调接口,被JdbcTemplate类使用,用于批量更新。

3.17  ParameterMapper:当在链接时须要对参数进行个性化设置时实现该接口。

3.18  PreparedStatementCallback:操做一个PreparedStatement通用的回调接口,容许在单个PreparedStatement执行任意数量的操做。好比单个的executeUpdate调用,或者使用不一样的参数executeUpdate屡次调用。

3.19  PreparedStatementCreator:JdbcTemplate类使用的两个核心回调接口中的一个,用于建立PreparedStatement。

3.20  PreparedStatementCreatorFactory:用于高效的建立多个PreparedStatementCreator。

3.21  PreparedStatementSetter:提供的PreparedStatement上设置value值,使用相同的SQL对批更新的每一项都进行设置。该接口的实现类负责设置全部必要参数。

3.22  ResultSetExtractor:JdbcTemplate的查询方法使用的回调接口。该接口的实现类从ResultSet中提取出result,不要考虑异常的处理。JdbcTemplate会捕获并处理SQLException。

       该接口主要在JDBC框架内部使用。对于ResultSet处理通常选择RowMapper,将每一行记录映射为一个结果对象,而不是将整个结果集ResultSet映射为一个结果对象。

3.23  ResultSetSupportingSqlParameter:ResultSet-supporting的SqlParameters类的通用基类,好比SqlOutParameter和SqlReturnResultSet。

3.24  RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操做由JdbcTemplate来执行,用户只需按行获取数据而后处理便可。

3.25  RowCountCallbackHandler:RowCallbackHandler接口的实现类。回调处理器的父类。一个实例只会使用一次。

3.26  RowMapper:Spring中的RowMapper能够将数据中的每一行数据封装成用户自定义的类。咱们在数据库查询中,若是返回的类型是用户自定义的类型(其实咱们在数据库查询中大部分返回的都是自定义的类)则须要包装,若是是Java自定义的类型,如String,则不须要。

       能够经过创建内部(外部)类实现RowMapper接口,RowMapper中有一个mapRow方法,因此实现RowMapper接口必定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现。

3.27  RowMapperResultSetExtractor:ResultSetExtractor接口的实现类,委托给一个RowMapper,RowMapper类为每一行记录建立一个对象。

3.28  SingleColumnRowMapper:RowMapper接口的实现类,当返回结果是单列的时候使用,为每一行记录的单列转换成单个的result value。

3.29  SqlInOutParameter:继承自SqlOutParameter,表示一个INOUT参数。

3.30  SqlOutParameter:SqlParameter的子类,表示一个output参数。

3.31  SqlParameter:用来表示一个SQL参数定义。

3.32  SqlParameterValue:表示一个SQL参数值,包括参数的元数据,如SQL类型、数值的规模。

3.33  SqlProvider:实现该接口的类可以提供SQL字符串。

3.34  SqlReturnResultSet:表示存储过程调用中返回的ResultSet。

3.35  SqlReturnType:标准的CallableStatement.getObject方法对一些复杂的database-specific类型的不支持,该接口的实现类会从这些复杂的database-specific类型中提取值。

3.36  SqlReturnUpdateCount:表示一次存储过程调用中更新过的数量。

3.37  SqlRowSetResultSetExtractor:ResultSetExtractor接口实现类,返回一个Spring的SqlRowSet,表示每个给定的ResultSet。

3.38  SqlTypeValue:该接口的实现类用于为一些复杂的database-specific类型设置值,这些复杂的database-specific标准的setObject方法不支持。在拓展的SqlValue变量有效。

3.39  StatementCallback:操做一个JDBC Statement的通用回调接口。容许在单个Statement执行任意数量的操做,好比单个的executeUpdate调用或者使用不一样的SQL屡次的executeUpdate调用。主要在JdbcTemplate内部使用,在应用代码中也有用。

3.40  StatementCreatorUtils:PreparedStatementSetter/Creator和CallableStatementCreator实现的一些实用的方法,提供了先进的参数管理(包括了对Lob (Large Object)的支持)。

jdbc/core/metadata

3.41  CallMetaDataContext:用来管理上下文元数据的类,这些元数据用在存储过程调用的配置和执行中。

3.42  CallMetaDataProvider:该接口用来指定一个提供call meta-date的类须要实现的API。主要在Spring的SimpleJdbcCall内部使用。

3.43  CallMetaDataProviderFactory:该工厂基于正在使用的数据库类型(如Apache Derby、DB二、Informix Dynamic Server、Microsoft SQL Server、MySQL、Oracle、PostgreSQL、Sybase)来建立CallMetaDataProvider实现类。

3.44  CallParameterMetaData:表示在call processing使用的特定的参数的元数据。

3.45  Db2CallMetaDataProvider:CallMetaDataProvider接口关于DB2的特定实现,这个类主要在简单的JDBC类内部使用。

3.46  DerbyCallMetaDataProvider:CallMetaDataProvider接口关于Derby的特定实现,这个类主要在简单的JDBC类内部使用。

       Apache Derby是一个彻底用java编写的数据库,Derby是一个Open source的产品,基于Apache License 2.0分发。

3.47  DerbyTableMetaDataProvider:TableMetaDataProvider接口关于Derby的特定实现。覆盖了Derby元数据信息,视为获取的产生的keys。

3.48  GenericCallMetaDataProvider:CallMetaDataProvider接口的通用实现类,该类可以被拓展以提供数据库特定的操做。

3.49  GenericTableMetaDataProvider:TableMetaDataProvider接口的通用实现,为全部支持的数据库提供足够的features。

3.50  HanaCallMetaDataProvider:CallMetaDataProvider接口关于SAP HANA的实现类,被JDBC类内部使用。

       SAP HANA(High-Performance Analytic Appliance)是SAP公司于2011年6月推出的基于内存计算技术的高性能实时数据计算平台,用户能够基于SAP HANA提供的内存计算技术,直接对大量实时业务数据进行查询和分析。

3.51  HsqlTableMetaDataProvider:TableMetaDataProvider接口关于HSQL的实现,能够在没有JDBC 3.0支持下提取generated keys。

3.52  OracleCallMetaDataProvider:CallMetaDataProvider接口关于Oracle-specific的实现,主要在JDBC类的内部使用。

3.53  OracleTableMetaDataProvider:TableMetaDataProvider接口关于Oracle-specific的实现,提供了在元数据查找中对同义词的支持。同时也可使用sys_context来查找当前的数据库模式。

3.54  PostgresCallMetaDataProvider:CallMetaDataProvider接口关于Postgres-specific的实现,主要被JDBC类内部使用。

3.55  PostgresTableMetaDataProvider:TableMetaDataProvider接口关于PostgrelSQL的实现。在没有JDBC 3.0 getGeneratedKeys支持下能提取generated keys。

3.56  SqlServerCallMetaDataProvider:CallMetaDataProvider接口关于SQL Server的实现,主要在JDBC类内部使用。

3.57  SybaseCallMetaDataProvider:CallMetaDataProvider接口关于Sybase的实现,主要被JDBC类内部使用。Sybase是美国Sybase公司研制的一种关系型数据库系统。

3.58  TableMetaDataContext:该类用来管理上下文的元数据,用于在一个数据库表格中进行配置和执行操做。

3.59  TableMetaDataProvider:该接口用来指定提供表格元数据的类须要实现的API,该类主要在JDBC类内部使用。

3.60  TableMetaDataProviderFactory:该工厂类用来基于当前使用的数据库类型,来建立TableMetaDataProvider实例,

3.61  TableParameterMetaData:在表格处理中使用的参数的元数据的句柄。

jdbc/core/namedparam

3.62  AbstractSqlParameterSource:SqlParameterSource接口实现类的抽象基类。对每一个参数的SQL类型进行注册,toString函数枚举了SqlParameterSource的全部参数。该抽象类的子类必须实现hasValue和getValue方法。

3.63  BeanPropertySqlParameterSource:SqlParameterSource接口实现类,用于从一个给定的JavaBean对象的bean 属性中获取参数值。bean属性的名字必须和参数的名字相匹配。

3.64  EmptySqlParameterSource:SqlParameterSource接口的空实现。

3.65  MapSqlParameterSource:MapSqlParameterSource是一个相似Map风格的类,包括 Key-Value,Key就是SQL中的参数。

3.66  NamedParameterBatchUpdateUtils:提供一些功能性函数,主要用于使用命名参数的JDBC批量 statements。该类在框架内部使用。

3.67  NamedParameterJdbcDaoSupport:继承自JdbcDaoSupport,另外还暴露一个NamedParameterJdbcTemplate。

3.68  NamedParameterJdbcOperations:用于指定一套JDBC基本操做的接口,使用命名的参数而不是使用传统的“?”占位符。

3.69  NamedParameterJdbcTemplate:该类增长了在SQL语句中使用命名参数的支持。在此以前,在传统的SQL语句中,参数都是用“?”占位符来表示的。 该类内部封装了一个普通的JdbcTemplate,并做为其代理来完成大部分工做。

3.70  NamedParameterUtils:命名参数的解析的帮助类,仅在Spring JDBC框架内部使用。

3.71  ParsedSql:保存解析过的SQL statement的信息。

3.72  SqlParameterSource:该接口为对象定义了一些通用的函数,这些对象可以为命名的SQL参数提供参数值。做为NamedParameterJdbcTemplate操做的参数使用。

3.73  SqlParameterSourceUtils:为使用SqlParameterSource提供一些帮助方法,特别是NamedParameterJdbcTemplate。

jdbc/core/simple

3.74  AbstractJdbcCall:抽象类,提供基本的功能方法用于基于配置选项和数据库元数据的存储过程调用。

3.75  AbstractJdbcInsert:抽象类,提供基本的功能方法用于基于配置选项和数据库元数据的插入操做。

3.76  SimpleJdbcCall:SimpleJdbcCall类是表示对存储过程或存储函数的调用的多线程,可重用的对象。 它提供元数据处理以简化访问基本存储过程/函数所需的代码。 全部须要提供的是程序/函数的名称和包含执行调用时参数的Map对象。 提供的参数的名称将与建立存储过程时声明的输入和输出参数相匹配。

3.77  SimpleJdbcCallOperations:该接口用来列出被SimpleJdbcCall实现的API。该接口一般不会被直接使用,而是用来加强可测试性。

3.78  SimpleJdbcInsert:SimpleJdbcInsert类是一个多线程,可重用的对象,为将数据插入表提供了易用的功能。它提供元数据处理以简化构建基本insert语句所需的代码。实际的插入是使用Spring的JdbcTemplate来处理的。

3.79  SimpleJdbcInsertOperations:该接口指定了简单的JDBC插入操做的API,会被SimpleJdbcInsert所实现。通常不直接使用,提供选择以提升可测试性。

jdbc/core/support

3.80  AbstractInterruptibleBatchPreparedStatementSetter:InterruptibleBatchPreparedStatementSetter接口的抽象实现类,组合the check for available values,将他们设置到回调函数setValuesIfAvailable中。

3.81  AbstractLobCreatingPreparedStatementCallback:PreparedStatementCallback接口的抽象实现类,用于管理一个LobCreator。做为一个内部类使用,提供了对surrounding方法参数的访问。

3.82  AbstractLobStreamingResultSetExtractor:提供解析数据的方法模板,并提供ResultSet对象实例

3.83  AbstractSqlTypeValue:SqlTypeValue接口的抽象实现类。

3.84  JdbcBeanDefinitionReader:基于一个给定的SQL statement,从一个数据库表中读取值。

3.85  JdbcDaoSupport:JdbcDaoSupport是JDBC数据访问对象的超类。它与特定的数据源相关联。IOC容器或BeanFactory负责得到相应数据源的配置详细信息,并将其与JdbcDaoSupport相关联。这个类最重要的功能就是使子类可使用JdbcTemplate对象。

3.86  SqlLobValue:该类用来表示一个SQL BLOB/CLOB值参数。

       BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是能够直接存储文字的。其实两个是能够互换的的,或者能够直接用LOB字段代替这两个。

       可是为了更好的管理,ORACLE数据库一般像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对之后的查询更新存储等操做都提供很大的方便。

4、 jdbc/datasource/

4.1  AbstractDataSource:AbstractDataSource是一个实现了DataSource 接口的抽象基类。它实现了DataSource接口的 一些无关痛痒的方法,若是你须要实现本身的DataSource,那么就继承 该类。

       DataSource接口:为了从数据库中取得数据,咱们首先须要获取一个数据库链接。 Spring经过DataSource对象来完成这个工做。 DataSource是JDBC规范的一部分, 它被视为一个通用的数据库链接工厂。经过使用DataSource, Container或Framework能够将链接池以及事务管理的细节从应用代码中分离出来。

       在使用Spring JDBC时,你既能够经过JNDI得到数据源,也能够自行配置数据源( 使用Spring提供的DataSource实现类)。使用后者能够更方便的脱离Web容器来进行单元测试。

4.2  AbstractDriverBasedDataSource:这个抽象类的子类都是基于Driver/DriverManager来获取Connection对象的,它也提供了这样一个抽象方法来要求子类实现:getConnectionFromDriver(Properties props)。

4.3  ConnectionHandle:JDBC链接的句柄实现该接口,好比会被JpaDialect使用。

4.4  ConnectionHolder:封装了一个JDBC 链接的资源句柄。DataSourceTransactionManager会为一个特定的DataSource,绑定该类的实例到线程上。

4.5  ConnectionProxy:继承自Connection的接口,会被Connection proxy所实现。容许访问目标链接。

4.6  DataSourceTransactionManager:该类是 PlatformTransactionManager接口的一个实现,用于处理单个JDBC数据源。 它将从指定DataSource取得的JDBC链接绑定到当前线程,所以它也支持了每一个数据源对应到一个线程。

       咱们推荐在应用代码中使用DataSourceUtils.getConnection(DataSource)来获取 JDBC链接,而不是使用J2EE标准的DataSource.getConnection。由于前者将抛出 unchecked的org.springframework.dao异常,而不是checked的 SQLException异常。Spring Framework中全部的类(好比 JdbcTemplate)都采用这种作法。若是不须要和这个 DataSourceTransactionManager类一块儿使用,DataSourceUtils 提供的功能跟通常的数据库链接策略没有什么两样,所以它能够在任何场景下使用。

       DataSourceTransactionManager类支持定制隔离级别,以及对SQL语句查询超时的设定。 为了支持后者,应用代码必须使用JdbcTemplate或者在每次建立SQL语句时调用 DataSourceUtils.applyTransactionTimeout方法。

       在使用单个数据源的情形下,你能够用DataSourceTransactionManager来替代JtaTransactionManager, 由于DataSourceTransactionManager不须要容器支持JTA。若是你使用DataSourceUtils.getConnection(DataSource)来获取 JDBC链接,两者之间的切换只须要更改一些配置。最后须要注意的一点就是JtaTransactionManager不支持隔离级别的定制。

4.7  DataSourceUtils:DataSourceUtils做为一个帮助类提供易用且强大的数据库访问能力, 咱们可使用该类提供的静态方法从JNDI获取数据库链接以及在必要的时候关闭。 它提供支持线程绑定的数据库链接(好比使用DataSourceTransactionManager 的时候,将把数据库链接绑定到当前的线程上)。

4.8  DelegatingDataSource:实现了JDBC DataSource接口,把全部的调用委托给一个给定的目标DataSource。

4.9  DriverManagerDataSource:该类实现了 SmartDataSource接口。在applicationContext.xml中可使用 bean properties来设置JDBC Driver属性,该类每次返回的都是一个新的链接。

       该类主要在测试以及脱离J2EE容器的独立环境中使用。它既能够用来在application context中做为一个 DataSource bean,也能够在简单的JNDI环境下使用。 因为Connection.close()仅仅只是简单的关闭数据库链接,所以任何可以获取 DataSource的持久化代码都能很好的工做。不过使用JavaBean风格的链接池 (好比commons-dbcp)也并不是难事。即便是在测试环境下,使用链接池也是一种比使用 DriverManagerDataSource更好的作法。

4.10  IsolationLevelDataSourceAdapter:该数据源继承自UserCredentialsDataSourceAdapter,用于适配特定的数据源,并启用isolationLevelName属性指定的隔离级别,并在这一隔离级别下进行数据库操做。

4.11  JdbcTransactionObjectSupport:JDBC-aware的事务对象的基类。

4.12  LazyConnectionDataSourceProxy:代理一个目标DataSource,延迟获取一个JDBC链接,好比,直到第一次建立一个Statement。

4.13  SimpleConnectionHandle:ConnectionHandle接口的简单实现,包含了一个给定的JDBC链接。

4.14  SimpleDriverDataSource:一个简单的数据源,每次获取Connection()时,会从新创建一个Connection。经过Driver来获取Connection对象。

4.15  SingleConnectionDataSource:SmartDataSource接口 的一个实现,其内部包装了一个单链接。该链接在使用以后将不会关闭,不能在多线程 的环境下使用。

       当客户端代码调用close方法的时候,若是它老是假设数据库链接来自链接池(就像使用持久化工具时同样), 你应该将suppressClose设置为true。 这样,经过该类获取的将是代理链接(禁止关闭)而不是原有的物理链接。 须要注意的是,咱们不能把使用该类获取的数据库链接造型(cast)为Oracle Connection之类的本地数据库链接。

       SingleConnectionDataSource主要在测试的时候使用。 它使得测试代码很容易脱离应用服务器而在一个简单的JNDI环境下运行。 与DriverManagerDataSource不一样的是,它始终只会使用同一个数据库链接, 从而避免每次创建物理链接的开销。

4.16  SmartDataSource:DataSource 接口的一个扩展,用来提供数据库链接。使用该接口的类在指定的操做以后能够检查是否须要关闭链接。 该接口在某些状况下很是有用,好比有些状况须要重用数据库链接。

4.17  TransactionAwareDataSourceProxy:TransactionAwareDataSourceProxy做为目标DataSource的一个代理, 在对目标DataSource包装的同时,还增长了Spring的事务管理能力, 在这一点上,这个类的功能很是像J2EE服务器所提供的事务化的JNDI DataSource。

       该类几乎不多被用到,除非现有代码在被调用的时候须要一个标准的 JDBC DataSource接口实现做为参数。 这种状况下,这个类可使现有代码参与Spring的事务管理。一般最好的作法是使用更高层的抽象来对数据源进行管理,好比JdbcTemplate和DataSourceUtils等等。

4.18  UserCredentialsDataSourceAdapter:将链接数据库的用户凭证信息出入到getConnection(String userName,String password)中。

4.19  WebSphereDataSourceAdapter:继承自IsolationLevelDataSourceAdapter,它会从WebSphere容器获取数据源。

jdbc/datasource/embedded

4.20  AbstractEmbeddedDatabaseConfigurer:EmbeddedDatabaseConfigurer实现类的抽象基类,经过一个“SHUTDOWN”statement提供了通用的关闭操做。

4.21  ConnectionProperties:该接口做为一个简单的数据容器,容许JDBC链接参数一致性的配置,和数据源实际实现无关。

4.22  DataSourceFactory:该工厂类封装了一个特定数据源实现的建立,好比一个非池化的SimpleDriverDataSource、或者以HikariDataSource形式创建的HikariCP池。

       HikariCP是Spring Framework 5.0的默认数据库链接池。

4.23  DerbyEmbeddedDatabaseConfigurer:EmbeddedDatabaseConfigurer接口关于Apache Derby数据库的实现。调用getInstance()函数会得到该类的一个单例实例。

       Apache Derby是一个彻底用Java编写的数据库,Derby是一个Open source的产品,基于Apache License 2.0分发。Apache Derby很是小巧,核心部分derby.jar只有2M,因此既能够作为单独的数据库服务器使用,也能够内嵌在应用程序中使用。

4.24  EmbeddedDatabase:一个嵌入式数据源实例的句柄。

4.25  EmbeddedDatabaseBuilder:构建器,提供了便捷的API用于构建一个嵌入式的数据库。

4.26  EmbeddedDatabaseConfigurer:该接口封装了用来建立、链接到、关闭一个指定的嵌入式数据库(如HSQL、H二、Derby)所须要的配置。

4.27  EmbeddedDatabaseConfigurerFactory:将熟知的嵌入式数据库类型映射到EmbeddedDatabaseConfigurer ,核心函数getConfigurer()。EmbeddedDatabaseType为HSQL,映射到HsqlEmbeddedDatabaseConfigurer;为H2,映射到H2EmbeddedDatabaseConfigurer;为DERBY,映射到DerbyEmbeddedDatabaseConfigurer。

4.28  EmbeddedDatabaseFactory:该工厂用于建立一个EmbeddedDatabase实例。

4.29  EmbeddedDatabaseFactoryBean:EmbeddedDatabaseFactory的子类,同时实现了FactoryBean接口用于做为一个Spring bean被注册。返回DataSource,用于提供链接嵌入式数据库到Spring。

4.30  EmbeddedDatabaseType:枚举类,枚举了嵌入式数据库三种类型:HSQL、H二、DERBY。

4.31  H2EmbeddedDatabaseConfigurer:EmbeddedDatabaseConfigurer接口基于H2嵌入式数据库实例的实现类。

4.32  HsqlEmbeddedDatabaseConfigurer:EmbeddedDatabaseConfigurer接口基于HSQL嵌入式数据库实例的实现类。

4.33  OutputStreamFactory:内部帮助类,用于暴露dummy输出流到嵌入式数据库,好比Derby,阻止建立一个日志文件。

4.34  SimpleDriverDataSourceFactory:用于建立一个SimpleDriverDataSource。

jdbc/datasource/init

4.35  CannotReadScriptException:当SQL脚本没法读取的时候,ScriptUtils抛出此异常。

4.36  CompositeDatabasePopulator:组合的DatabasePopulator,代理一列给定的DatabasePopulator实现,执行全部的脚本。

4.37  DatabasePopulator:策略接口,用来对一个数据库增添数据、初始化、清理。

4.38  DatabasePopulatorUtils:执行DatabasePopulator的一些功能性函数。

4.39  DataSourceInitializer:用来在初始化的时候建立一个数据库,或者在销毁的时候清理一个数据库。

4.40  ResourceDatabasePopulator:使用外部资源中定义的SQL脚原本对一个数据库进行增添数据、初始化、清理等操做。

4.41  ScriptException:处理SQL脚本时发生数据读取异常抛出。

4.42  ScriptParseException:SQL脚本不能正确解析时由ScriptUtils抛出此异常。

4.43  ScriptStatementFailedException:当SQL脚本中的一个statement执行失败时由ScriptUtils抛出此异常。

4.44  ScriptUtils:使用SQL脚本时一些通用的功能性方法。主要在框架内部使用。

4.45  UncategorizedScriptException:当处理SQL脚本时出现故障,可是没法进一步定位或者处理时抛出此异常,好比,JDBC抛出的SQLException,可是咱们没法更精确的定位时。

jdbc/datasource/lookup

4.46  AbstractRoutingDataSource:经过这个类能够实现动态数据源切换。抽象方法 determineCurrentLookupKey() 决定使用哪一个数据源。

4.47  BeanFactoryDataSourceLookup:基于Spring BeanFactory的DataSourceLookup接口的实现类。

4.48  DataSourceLookup:策略接口,经过名字来查找数据源。

       策略(Strategy)模式:该模式定义了一系列算法,并将每一个算法封装起来,使它们能够相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它经过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不一样的对象对这些算法进行管理。

4.49  DataSourceLookupFailureException:DataSourceLookup接口的实现类会抛出该异常,指示指定的数据源没法得到。

4.50  IsolationLevelDataSourceRouter:根据当前Spring受管事务启用的隔离级别来选定合适的DataSource数据源。事实上,该数据源主要在JTA环境中使用。

4.51  JndiDataSourceLookup:基于JNDI的DataSourceLookup接口实现类。JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口。

4.52  MapDataSourceLookup:依赖一个map进行查找的DataSourceLookup接口的实现类。

4.53  SingleDataSourceLookup:DataSourceLookup接口的实现类,简单封装一个给定的数据源,任何数据源名字都返回此值。

5、 jdbc/object

5.1  BatchSqlUpdate:继承自SqlUpdate,能够进行批量的更新操做。

5.2  GenericSqlQuery:一种具体的SqlQuery,可使用RowMapper进行配置。

5.3  GenericStoredProcedure:继承自StoredProcedure,在一个容器中定义关系数据库的存储过程。

5.4  MappingSqlQuery:MappingSqlQuery是一个可重用的查询抽象类,其具体类必须实现 mapRow(ResultSet, int)抽象方法来将结果集中的每一行转换成Java对象。在SqlQuery的各类实现中, MappingSqlQuery是最经常使用也是最容易使用的一个。

5.5  MappingSqlQueryWithParameters:继承自SqlQuery,主要是实现了SqlQuery中的newRowMapper()虚函数。在该函数中建立了一个实现了RowMapper<T>的类RowMapperImpl的对象并返回。RowMapperImpl是在MappingSqlQueryWithParameters类中定义的内部类。

5.6  RdbmsOperation:RdbmsOperation 是一个重用的java object对象表明sql查询,更新或者存储过程。

5.7  SqlCall:继承自RdbmsOperation,使用一个JdbcTemplate,表示一个SQL调用,好比一个存储过程或者一个存储函数。

5.8  SqlFunction:SqlFunction RDBMS操做类封装了一个SQL“函数”包装器(wrapper), 该包装器适用于查询并返回一个单行结果集。默认返回的是一个int值, 不过咱们能够采用相似JdbcTemplate中的queryForXxx 作法本身实现来返回其它类型。SqlFunction优点在于咱们没必要建立 JdbcTemplate,这些它都在内部替咱们作了。

       该类的主要用途是调用SQL函数来返回一个单值的结果集,好比相似“select user()”、 “select sysdate from dual”的查询。若是须要调用更复杂的存储函数, 可使用StoredProcedure或SqlCall。

       SqlFunction是一个具体类,一般咱们不须要它的子类。 其用法是建立该类的实例,而后声明SQL语句以及参数就能够调用相关的run方法去屡次执行函数。

5.9  SqlOperation:操做对象,用来表示一个SQL操做,好比查询或者更新,而不是一个存储过程。

5.10  SqlQuery:SqlQuery是一个可重用、线程安全的类,它封装了一个SQL查询。 其子类必须实现newResultReader()方法,该方法用来在遍历 ResultSet的时候能使用一个类来保存结果。 咱们不多须要直接使用SqlQuery,由于其子类 MappingSqlQuery做为一个更加易用的实现可以将结果集中的行映射为Java对象。 SqlQuery还有另外两个扩展分别是 MappingSqlQueryWithParameters和UpdatableSqlQuery。

5.11  SqlUpdate:SqlUpdate类封装了一个可重复使用的SQL更新操做。 跟全部RdbmsOperation类同样,SqlUpdate能够在SQL中定义参数。

       该类提供了一系列update()方法,就像SqlQuery提供的一系列execute()方法同样。

       SqlUpdate是一个具体的类。经过在SQL语句中定义参数,这个类能够支持 不一样的更新方法,咱们通常不须要经过继承来实现定制。

5.12  StoredProcedure:StoredProcedure类是一个抽象基类,它是对RDBMS存储过程的一种抽象。 该类提供了多种execute(..)方法,不过这些方法的访问类型都是protected的。

       从父类继承的sql属性用来指定RDBMS存储过程的名字。 尽管该类提供了许多必须在JDBC3.0下使用的功能,可是咱们更关注的是JDBC 3.0中引入的命名参数特性。

5.13  UpdatableSqlQuery:继承自SqlQuery,可重复使用的关系数据库查询,其实现的子类必须实现抽象方法updateRow(ResultSet, int, context)来对JDBC结果集中的每一行进行更新。

6、 jdbc/support

6.1  AbstractFallbackSQLExceptionTranslator:SQLExceptionTranslator接口的抽象实现类,容许回退到其余的SQLExceptionTranslator。

6.2  CustomSQLErrorCodesTranslation:JavaBean,保存用于特定数据库的自定义的JDBC错误代码转换。“exceptionClass”属性用来定义错误代码中哪种异常将被抛出。

6.3  CustomSQLExceptionTranslatorRegistrar:为特定的数据库注册自定义的SQLExceptionTranslator实例。

6.4  CustomSQLExceptionTranslatorRegistry:注册特定的数据库的自定义SQLExceptionTranslator实例。

6.5  DatabaseMetaDataCallback:JdbcUtils类使用的一个回调接口。该接口的实现类用于提取数据库的元数据,而不用考虑异常的处理。SQLException将会被JdbcUtils类捕获和处理。

6.6  DatabaseStartupValidator:用来检测一个数据库是否已经启动的bean。

6.7  GeneratedKeyHolder:该类返回新增记录时的自增加主键值。

6.8  JdbcAccessor:JdbcAccessor类是JdbcTemplate类的基类,用于处理JDBC的链接操做,同时也定义数据源、异常翻译器等经常使用属性。

6.9  JdbcUtils:JDBC工具类,包含数据源链接、断连、数据查询、数据更新及命令执行,方便直接使用Jdbc进行数据操做。

6.10  KeyHolder:用来检索键的接口,一般用于JDBC进行插入操做后返回的自动生成的键。该接口的实现类能够保存任意数量的键,通常状况下,这些键做为一个列表返回,其中包含了每一行记录的键值的映射。KeyHolder的默认实现为GeneratedKeyHolder。

6.11  MetaDataAccessException:该异常表示在进行JDBC元数据查找时发生了错误。

6.12  SQLErrorCodes:用来为一个特定数据库保存JDBC错误代码的JavaBean。该类的实例通常经过bean工厂载入。会被Spring的SQLErrorCodeSQLExceptionTranslator使用。此包中的"sql-error-codes.xml"文件包含了各类不一样数据库默认的SQLErrorCodes实例。

6.13  SQLErrorCodesFactory:工厂类,基于取自DatabaseMetaData的databaseProductName建立SQLErrorCodes。

6.14  SQLErrorCodeSQLExceptionTranslator:SQLExceptionTranslator的默认实现。 该实现使用指定数据库厂商的error code,比采用SQLState更精确。 转换过程基于一个JavaBean(类型为SQLErrorCodes)中的error code。 这个JavaBean由SQLErrorCodesFactory工厂类建立,其中的内容来自于 "sql-error-codes.xml"配置文件。该文件中的数据库厂商代码基于Database MetaData信息中的 DatabaseProductName,从而配合当前数据库的使用。

  SQLErrorCodeSQLExceptionTranslator使用如下的匹配规则:

       首先检查是否存在完成定制转换的子类实现。一般SQLErrorCodeSQLExceptionTranslator 这个类能够做为一个具体类使用,不须要进行定制,那么这个规则将不适用。

       接着将SQLException的error code与错误代码集中的error code进行匹配。 默认状况下错误代码集将从SQLErrorCodesFactory取得。 错误代码集来自classpath下的sql-error-codes.xml文件, 它们将与数据库metadata信息中的database name进行映射。

       若是仍然没法匹配,最后将调用fallbackTranslator属性的translate方法,SQLStateSQLExceptionTranslator类实例是默认的fallbackTranslator。

6.15  SQLExceptionSubclassTranslator:SQLExceptionTranslator接口的实现类,会对JDBC驱动抛出的SQLException进行解析。

6.16  SQLExceptionTranslator:是一个接口,若是你须要在 SQLException和org.springframework.dao.DataAccessException之间做转换,那么必须实现该接口。 转换器类的实现能够采用通常通用的作法(好比使用JDBC的SQLState code),若是为了使转换更准确,也能够进行定制(好比使用Oracle的error code)。

6.17  SQLStateSQLExceptionTranslator:SQLExceptionTranslator接口的实现类,基于SQLException分析SQL的状态。

6.18  SqlValue:用于一些复杂类型的接口,这些类型要做为statement参数被设置。

jdbc/support/incrementer

6.19  AbstractColumnMaxValueIncrementer:使用一张模拟序列的表产生主键值,能够经过cacheSize属性指定缓存的主键个数,当内存中主键值用完后,递增器将一次性获取cacheSize个主键,这样能够减小数据库访问的次数,提升应用的性能。

6.20  AbstractDataFieldMaxValueIncrementer:实现DataFieldMaxValueIncrementer接口,是一个抽象类,它定义了三个属性:

       private DataSource dataSource;  // 数据源

       private String incrementerName;  // 发号表表名

       protected int paddingLength = 0;  // 返回字符串类型补零位数

       而后定义了一个抽象方法getNextKey(),将接口中的三个方法归一化成这一个方法,子类只需实现返回long类型返回值便可。

6.21  AbstractIdentityColumnMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类的抽象基类,基于序列式表格的自增列。

6.22  AbstractSequenceMaxValueIncrementer:AbstractSequenceMaxAbstractSequence使用标准的数据库序列产生主键值,

6.23  DataFieldMaxValueIncrementer:spring jdbc 提供了自增,自增对象让咱们能够不依赖数据库的自增键,在应用层为新纪录提供主键值。通常数据库提供了自增键的功能,如MySql的auto_increment,SqlServer的identity字段等。Spring运行用户在应用层产生主键值,为此定义了DataFieldMaxValueIncrementer接口。

  该接口提供3个获取下一个主键值的方法,就是以不一样类型获取发号器的下一个值。

       int nextIntValue();获取下一个主键值,主键值类型为int,

       long nextLongValue();获取下一个主键值,主键值类型为long,

       String nextStringValue();获取下一个主键值,主键值类型为String。

6.24  DB2MainframeSequenceMaxValueIncrementer:继承自AbstractSequenceMaxValueIncrementer,在大型商业服务器(z/OS、 DB2/390、DB2/400)上的DB2中一个指定的序列中获取下一个值。

       已废弃,被Db2MainframeMaxValueIncrementer取代。

6.25  Db2MainframeMaxValueIncrementer:继承自AbstractSequenceMaxValueIncrementer,在大型商业服务器(z/OS、 DB2/390、DB2/400)上的DB2中一个指定的序列中获取下一个值。

6.26  DB2SequenceMaxValueIncrementer:继承自AbstractSequenceMaxValueIncrementer,在DB2 LUW(Linux、Unix和Windows)上一个给定的序列中获取下一个值。

       已废弃,被Db2LuwMaxValueIncrementer取代。

6.27  Db2LuwMaxValueIncrementer:继承自AbstractSequenceMaxValueIncrementer,在DB2 LUW(Linux、Unix和Windows)上一个给定的序列中获取下一个值。

6.28  DerbyMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对一个给定的Derby表格的最大值进行增长,等同于一个自增的列。注意:若是使用了该类,你的Derby的key列就不要设置为自增的列,由于序列化表格会作此事。

6.29  H2SequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对一个给定的H2序列取得下一个值。

6.30  HanaSequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对一个给定的SAP HANA序列取得下一个值。

6.31  HsqlMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对于一个HSQL表格增长最大值,做用等同于自增的列。注意:若是你使用该类,你的HSQL键列不要设置为自增,由于这个序列化表格作了这份工做。

6.32  HsqlSequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,从一个给定的HSQL表格中获取下一个值。

6.33  MySQLMaxValueIncrementer:一个基于MySQL数据源的自增发号器类,它利用MySQL的last_insert_id()函数和内存缓存巧妙的实现了支持分布式和高效的发号器功能。

6.34  OracleSequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,用于从一个给定的Oracle序列中获取下一个值。

6.35  PostgreSQLSequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,用于从一个给定的PostgreSQL序列中获取下一个值。

       已废弃,被PostgresSequenceMaxValueIncrementer取代。

6.36  PostgresSequenceMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,用于从一个给定的PostgreSQL序列中获取下一个值。

6.37  SqlServerMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对于一个SQL Server表格增长其最大值,做用等同于自增的列。注意:若是你使用该类,你的表格键列不要设置为自增,由于这个序列化表格作了这份工做。

6.38  SybaseAnywhereMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对于一个Sybase表格增长其最大值,做用等同于自增的列。注意:若是你使用该类,你的表格键值列不要设置为自增,由于这个序列化表格作了这份工做。该类用在任意的Sybase处。

6.39  SybaseMaxValueIncrementer:DataFieldMaxValueIncrementer接口实现类,对于一个Sybase表格增长其最大值,做用等同于自增的列。注意:若是你使用该类,你的表格键值列不要设置为自增,由于这个序列化表格作了这份工做。该类用在Sybase Adaptive Server处。

jdbc/support/lob

       LOB 表明大对象数据,包括 BLOB 和 CLOB 两种类型,前者用于存储大块的二进制数据,如图片数据,视频数据等,然后者用于存储长文本数据,如论坛的帖子内容,产品的详细描述等。

       在不一样的数据库中,大对象对应的字段类型是不尽相同的,如 DB2 对应 BLOB/CLOB,MySql 对应 BLOB/LONGTEXT,SqlServer 对应 IMAGE/TEXT。

       有些数据库的大对象类型能够象简单类型同样访问,如 MySql 的 LONGTEXT 的操做方式和 VARCHAR 类型同样。在通常状况下, LOB 类型数据的访问方式不一样于其它简单类型的数据,咱们常常会以流的方式操做 LOB 类型的数据。此外,LOB 类型数据的访问不是线程安全的,须要为其单独分配相应的数据库资源,并在操做完成后释放资源。最后,Oracle 9i 很是有个性地采用非 JDBC 标准的 API 操做 LOB 数据。全部这些状况给编写操做 LOB 类型数据的程序带来挑战,Spring 在org.springframework.jdbc.support.lob包中为咱们提供了相应的帮助类,以便咱们轻松应对这头拦路虎。

       Spring 大大下降了咱们处理 LOB 数据的难度。首先,Spring 提供了NativeJdbcExtractor接口,您能够在不一样环境里选择相应的实现类从数据源中获取本地 JDBC 对象;其次,Spring 经过LobCreator接口取消了不一样数据厂商操做 LOB 数据的差异,并提供了建立 LobCreator 的LobHandler接口,您只要根据底层数据库类型选择合适的 LobHandler 进行配置便可。

6.40  AbstractLobHandler:LobHandler接口实现类的抽象基类。

6.41  DefaultLobHandler:LobHandler接口的默认实现,调用ResultSet 和PreparedStatement提供的存取方法。

6.42  LobCreator:以统一的方式操做各类数据库的 LOB 类型数据。由于 LobCreator 自己持有 LOB 所对应的数据库资源,因此它不是线程安全的,一个 LobCreator 只能操做一个 LOB 数据。

6.43  LobHandler:LobHandler接口为操做 BLOB/CLOB 提供了统一访问接口,而无论底层数据库到底是以大对象的方式仍是以通常数据类型的方式进行操做。此外,LobHandler 还充当了 LobCreator 的工厂类。

6.44  PassThroughBlob:简单的JDBC Blob适配器,暴露一个给定的字节数组或者二进制流。该类被DefaultLobHandler使用。

6.45  PassThroughClob:简单的JDBC Clob适配器,暴露一个给定的字符串或者字符流。该类被DefaultLobHandler使用。

6.46  TemporaryLobCreator:基于临时性的LOBs的LobCreator接口实现类。使用JDBC 4.0的java.sql.Connection#createBlob()。

jdbc/support/rowset

6.47  ResultSetWrappingSqlRowSet:Spring的SqlRowSet接口的默认实现类,封装了一个ResultSet,捕获全部的SQLException,而后将其转换成相应的Spring InvalidResultSetAccessException。

6.48  ResultSetWrappingSqlRowSetMetaData:SqlRowSetMetaData接口的默认实现类,封装了一个ResultSetMetaData实例,捕获全部的SQLException,而后将其转换成相应的InvalidResultSetAccessException。

6.49  SqlRowSet:继承自java.io.Serializable,是RowSet的镜像接口,用来表示一种断开链接的结果集。SqlRowSet和标准的JDBC RowSet主要的不一样之处在于它不会抛出SQLException。这就让使用SqlRowSet时不须要考虑去处理此类异常。取而代之的是,一个SqlRowSet会抛出Spring的InvalidResultSetAccessException。

6.50  SqlRowSetMetaData:基于SqlRowSet的元数据接口,相似于JDBC的ResultSetMetaData。

jdbc/support/xml

6.51  Jdbc4SqlXmlHandler:SqlXmlHandler接口的默认实现类。借助于JDBC 4.0 java.sql.SQLXML实现了将XML文档存储到特定数据库的域中,或者将其从数据库域中取出。

6.52  SqlXmlFeatureNotImplementedException:当底层实现不支持请求的API时抛出异常。

6.53  SqlXmlHandler:对数据库中XML字段处理的抽象。它的主要目的是隔离对存储在数据库中的XML的处理。

6.54  SqlXmlValue:继承自SqlValue接口,支持将XML数据传给特定的列,增长清理的回调方法,在值设置完毕和相应的statement执行完毕后调用。

6.55  XmlBinaryStreamProvider:该接口定义了对提供输出流数据的处理操做,这些输出流是做为做为XML输入的。

6.56  XmlCharacterStreamProvider:该接口定义了一些处理操做,用于提供做为XML输入的写入数据。

6.57  XmlResultProvider:该接口定义了一些处理操做,用于提供做为XML输入的结果数据。

 

拓展阅读:
  Spring源码深度解析之数据库链接JDBC
  Spring框架之spring-webmvc源码彻底解析
  Spring源码深度解析之Spring MVC
  Spring框架之spring-web web源码彻底解析
  Spring框架之spring-web http源码彻底解析
  Spring框架之jms源码彻底解析
  Spring框架之AOP源码彻底解析
  Spring框架之beans源码彻底解析

 

博众家之所长,集群英之荟萃。遴选各IT领域精品雄文!

欢迎关注“IT架构精选”

 

相关文章
相关标签/搜索