?
This document uses PHP Chinese website manual Release
目錄
JdbcTemplate
類NamedParameterJdbcTemplate
類SimpleJdbcTemplate
類DataSource
接口SQLExceptionTranslator
接口DataSourceUtils
類SmartDataSource
接口AbstractDataSource
類SingleConnectionDataSource
類DriverManagerDataSource
類TransactionAwareDataSourceProxy
類DataSourceTransactionManager
類SqlQuery
類MappingSqlQuery
類SqlUpdate
類StoredProcedure
類SqlFunction
類Spring JDBC抽象框架所帶來(lái)的價(jià)值將在以下幾個(gè)方面得以體現(xiàn):(注:使用了Spring JDBC抽象框架之后,應(yīng)用開(kāi)發(fā)人員只需要完成斜體字部分的編碼工作。)
定義數(shù)據(jù)庫(kù)連接參數(shù)
打開(kāi)數(shù)據(jù)庫(kù)連接
聲明SQL語(yǔ)句
預(yù)編譯并執(zhí)行SQL語(yǔ)句
遍歷查詢結(jié)果(如果需要的話)
處理每一次遍歷操作
處理拋出的任何異常
處理事務(wù)
關(guān)閉數(shù)據(jù)庫(kù)連接
Spring將替我們完成所有使用JDBC API進(jìn)行開(kāi)發(fā)的單調(diào)乏味的、底層細(xì)節(jié)處理工作。
使用Spring進(jìn)行基本的JDBC訪問(wèn)數(shù)據(jù)庫(kù)有多種選擇。Spring至少提供了三種不同的工作模式:JdbcTemplate, 一個(gè)在Spring2.5中新提供的SimpleJdbc類能夠更好的處理數(shù)據(jù)庫(kù)元數(shù)據(jù); 還有一種稱之為RDBMS Object的風(fēng)格的面向?qū)ο蠓庋b方式, 有點(diǎn)類似于JDO的查詢?cè)O(shè)計(jì)。 我們?cè)谶@里簡(jiǎn)要列舉你采取某一種工作方式的主要理由. 不過(guò)請(qǐng)注意, 即使你選擇了其中的一種工作模式, 你依然可以在你的代碼中混用其他任何一種模式以獲取其帶來(lái)的好處和優(yōu)勢(shì)。 所有的工作模式都必須要求JDBC 2.0以上的數(shù)據(jù)庫(kù)驅(qū)動(dòng)的支持, 其中一些高級(jí)的功能可能需要JDBC 3.0以上的數(shù)據(jù)庫(kù)驅(qū)動(dòng)支持。
JdbcTemplate - 這是經(jīng)典的也是最常用的Spring對(duì)于JDBC訪問(wèn)的方案。這也是最低級(jí)別的封裝, 其他的工作模式事實(shí)上在底層使用了JdbcTemplate作為其底層的實(shí)現(xiàn)基礎(chǔ)。JdbcTemplate在JDK 1.4以上的環(huán)境上工作得很好。
NamedParameterJdbcTemplate - 對(duì)JdbcTemplate做了封裝,提供了更加便捷的基于命名參數(shù)的使用方式而不是傳統(tǒng)的JDBC所使用的“?”作為參數(shù)的占位符。這種方式在你需要為某個(gè)SQL指定許多個(gè)參數(shù)時(shí),顯得更加直觀而易用。該特性必須工作在JDK 1.4以上。
SimpleJdbcTemplate - 這個(gè)類結(jié)合了JdbcTemplate和NamedParameterJdbcTemplate的最常用的功能,同時(shí)它也利用了一些Java 5的特性所帶來(lái)的優(yōu)勢(shì),例如泛型、varargs和autoboxing等,從而提供了更加簡(jiǎn)便的API訪問(wèn)方式。需要工作在Java 5以上的環(huán)境中。
SimpleJdbcInsert 和 SimpleJdbcCall - 這兩個(gè)類可以充分利用數(shù)據(jù)庫(kù)元數(shù)據(jù)的特性來(lái)簡(jiǎn)化配置。通過(guò)使用這兩個(gè)類進(jìn)行編程,你可以僅僅提供數(shù)據(jù)庫(kù)表名或者存儲(chǔ)過(guò)程的名稱以及一個(gè)Map作為參數(shù)。其中Map的key需要與數(shù)據(jù)庫(kù)表中的字段保持一致。這兩個(gè)類通常和SimpleJdbcTemplate配合使用。這兩個(gè)類需要工作在JDK 5以上,同時(shí)數(shù)據(jù)庫(kù)需要提供足夠的元數(shù)據(jù)信息。
RDBMS 對(duì)象包括MappingSqlQuery, SqlUpdate and StoredProcedure - 這種方式允許你在初始化你的數(shù)據(jù)訪問(wèn)層時(shí)創(chuàng)建可重用并且線程安全的對(duì)象。該對(duì)象在你定義了你的查詢語(yǔ)句,聲明查詢參數(shù)并編譯相應(yīng)的Query之后被模型化。一旦模型化完成,任何執(zhí)行函數(shù)就可以傳入不同的參數(shù)對(duì)之進(jìn)行多次調(diào)用。這種方式需要工作在JDK 1.4以上。
Spring Framework的JDBC抽象框架由四個(gè)包構(gòu)成:core
、 dataSource
、object
以及support
。
org.springframework.jdbc.core
包由JdbcTemplate
類以及相關(guān)的回調(diào)接口(callback interface)和類組成。
org.springframework.jdbc.core.simple
子包則包含了
SimpleJdbcTemplate
類以及相關(guān)的SimpleJdbcInsert
類和SimpleJdbcCall
類。
org.springframework.jdbc.core.namedparam
子包則包含了NamedParameterJdbcTemplate
類以及其相關(guān)的支持類。
org.springframework.jdbc.datasource
包提供了一些工具類來(lái)簡(jiǎn)化對(duì)DataSource
的訪問(wèn)。同時(shí)提供了多種簡(jiǎn)單的DataSource
實(shí)現(xiàn)。這些實(shí)現(xiàn)可以脫離J2EE容器進(jìn)行獨(dú)立測(cè)試和運(yùn)行。
這些工具類提供了一些靜態(tài)方法,允許你通過(guò)JNDI來(lái)獲取數(shù)據(jù)庫(kù)連接和關(guān)閉連接。同時(shí)支持綁定到當(dāng)前線程的數(shù)據(jù)庫(kù)連接。例如使用DataSourceTransactionManager
。
接著org.springframework.jdbc.object
包包含了一些類,用于將RDBMS查詢、更新以及存儲(chǔ)過(guò)程表述為一些可重用的、線程安全的對(duì)象。這種方式通過(guò)JDO進(jìn)行模型化,不過(guò)這些通過(guò)查詢返回的對(duì)象是與數(shù)據(jù)庫(kù)脫離的對(duì)象。 這種對(duì)于JDBC的高層次的封裝是基于org.springframework.jdbc.core
包對(duì)JDBC的低層次封裝之上的。
最后,org.springframework.jdbc.support
包定義了SQLException
轉(zhuǎn)化類以及一些其他的工具類。
在JDBC調(diào)用過(guò)程中所拋出的異常都會(huì)被轉(zhuǎn)化為在org.springframework.dao
包中定義的異常。也就是說(shuō),凡是使用Spring的JDBC封裝層的代碼無(wú)需實(shí)現(xiàn)任何JDBC或者RDBMS相關(guān)的異常處理。所有的這些被轉(zhuǎn)化的異常都是unchecked異常,因而也給了你一種額外的選擇,你可以抓住這些異常,從而轉(zhuǎn)化成其他類型的異常被允許調(diào)用者傳播。