# 【第七章】 對JDBC的支持 之 7.1 概述 ——跟我學spring3
## 7.1? 概述
### 7.1.1? JDBC回顧
傳統應用程序開發中,進行JDBC編程是相當痛苦的,如下所示:
```
//cn.javass.spring.chapter7\. TraditionalJdbcTest
@Test
public void test() throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getConnection(); //1.獲取JDBC連接
//2.聲明SQL
String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";
pstmt = conn.prepareStatement(sql); //3.預編譯SQL
ResultSet rs = pstmt.executeQuery(); //4.執行SQL
process(rs); //5.處理結果集
closeResultSet(rs); //5.釋放結果集
closeStatement(pstmt); //6.釋放Statement
conn.commit(); //8.提交事務
} catch (Exception e) {
//9.處理異常并回滾事務
conn.rollback();
throw e;
} finally {
//10.釋放JDBC連接,防止JDBC連接不關閉造成的內存泄漏
closeConnection(conn);
}
}
```
以上代碼片段具有冗長、重復、容易忘記某一步驟從而導致出錯、顯示控制事務、顯示處理受檢查異常等等。
有朋友可能重構出自己的一套JDBC模板,從而能簡化日常開發,但自己開發的JDBC模板不夠通用,而且對于每一套JDBC模板實現都差不多,從而導致開發人員必須掌握每一套模板。
Spring JDBC提供了一套JDBC抽象框架,用于簡化JDBC開發,而且如果各個公司都使用該抽象框架,開發人員首先減少了學習成本,直接上手開發,如圖7-1所示。

圖7-1 Spring JDBC與傳統JDBC編程對比
### 7.1.2? Spring對JDBC的支持
Spring通過抽象JDBC訪問并提供一致的API來簡化JDBC編程的工作量。我們只需要**聲明SQL、調用合適的Spring JDBC框架API、處理結果集**即可。事務由Spring管理,并將JDBC受查異常轉換為Spring一致的非受查異常,從而簡化開發。
Spring主要提供**JDBC模板方式、關系數據庫對象化方式和SimpleJdbc**方式三種方式來簡化JDBC編程,這三種方式就是Spring JDBC的工作模式:
* **?JDBC模板方式:**Spring JDBC框架提供以下幾種模板類來簡化JDBC編程,實現GoF模板設計模式,將可變部分和非可變部分分離,可變部分采用回調接口方式由用戶來實現:如JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate。
* **關系數據庫操作對象化方式:**Spring JDBC框架提供了將關系數據庫操作對象化的表示形式,從而使用戶可以采用面向對象編程來完成對數據庫的訪問;如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等類。這些類的實現一旦建立即可重用并且是線程安全的。
* **SimpleJdbc方式:**Spring JDBC框架還提供了**SimpleJdbc方式**來簡化JDBC編程,SimpleJdbcInsert 、 SimpleJdbcCall用來簡化數據庫表插入、存儲過程或函數訪問。
Spring JDBC還提供了一些強大的工具類,如DataSourceUtils來在必要的時候手工獲取數據庫連接等。
### 7.1.4?? ?Spring的JDBC架構
Spring JDBC抽象框架由四部分組成:datasource、support、core、object。如圖7-2所示。

圖7-2 Spring JDBC架構圖
**support包:**提供將JDBC異常轉換為DAO非檢查異常轉換類、一些工具類如JdbcUtils等。
**datasource包:**提供簡化訪問JDBC 數據源(javax.sql.DataSource實現)工具類,并提供了一些DataSource簡單實現類從而能使從這些DataSource獲取的連接能自動得到Spring管理事務支持。
**core包:**提供JDBC模板類實現及可變部分的回調接口,還提供SimpleJdbcInsert等簡單輔助類。
**?????? object包:**提供關系數據庫的對象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等類,該包是基于core包JDBC模板類實現。
原創內容,轉載請注明 出處【[http://sishuok.com/forum/blogPost/list/0/2489.html](http://sishuok.com/forum/blogPost/list/0/2489.html#7197)】
- 跟我學 Spring3
- 【第二章】 IoC 之 2.1 IoC基礎 ——跟我學Spring3
- 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我學Spring3
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我學Spring3
- 【第三章】 DI 之 3.1 DI的配置使用 ——跟我學spring3
- 【第三章】 DI 之 3.2 循環依賴 ——跟我學spring3
- 【第三章】 DI 之 3.3 更多DI的知識 ——跟我學spring3
- 【第三章】 DI 之 3.4 Bean的作用域 ——跟我學spring3
- 【第四章】 資源 之 4.1 基礎知識 ——跟我學spring3
- 【第四章】 資源 之 4.2 內置Resource實現 ——跟我學spring3
- 【第四章】 資源 之 4.3 訪問Resource ——跟我學spring3
- 【第四章】 資源 之 4.4 Resource通配符路徑 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.1 概述 5.2 SpEL基礎 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.3 SpEL語法 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.4在Bean定義中使用EL—跟我學spring3
- 【第六章】 AOP 之 6.1 AOP基礎 ——跟我學spring3
- 【第六章】 AOP 之 6.2 AOP的HelloWorld ——跟我學spring3
- 【第六章】 AOP 之 6.3 基于Schema的AOP ——跟我學spring3
- 【第六章】 AOP 之 6.4 基于@AspectJ的AOP ——跟我學spring3
- 【第六章】 AOP 之 6.5 AspectJ切入點語法詳解 ——跟我學spring3
- 【第六章】 AOP 之 6.6 通知參數 ——跟我學spring3
- 【第六章】 AOP 之 6.7 通知順序 ——跟我學spring3
- 【第六章】 AOP 之 6.8 切面實例化模型 ——跟我學spring3
- 【第六章】 AOP 之 6.9 代理機制 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.1 概述 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.2 JDBC模板類 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.3 關系數據庫操作對象化 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.4 Spring提供的其它幫助 ——跟我學spring3【私塾在線原創】
- 【第七章】 對JDBC的支持 之 7.5 集成Spring JDBC及最佳實踐 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.1 概述 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.2 集成Hibernate3 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.3 集成iBATIS ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.4 集成JPA ——跟我學spring3
- 【第九章】 Spring的事務 之 9.1 數據庫事務概述 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.2 事務管理器 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.3 編程式事務 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.4 聲明式事務 ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.1 概述 ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.2 集成Struts1.x ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.3 集成Struts2.x ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.1 概述 ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.2 實現通用層 ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.3 實現積分商城層 ——跟我學spring3
- 【第十二章】零配置 之 12.1 概述 ——跟我學spring3
- 【第十二章】零配置 之 12.2 注解實現Bean依賴注入 ——跟我學spring3
- 【第十二章】零配置 之 12.3 注解實現Bean定義 ——跟我學spring3
- 【第十二章】零配置 之 12.4 基于Java類定義Bean配置元數據 ——跟我學spring3
- 【第十二章】零配置 之 12.5 綜合示例-積分商城 ——跟我學spring3
- 【第十三章】 測試 之 13.1 概述 13.2 單元測試 ——跟我學spring3
- 【第十三章】 測試 之 13.3 集成測試 ——跟我學spring3
- 跟我學 Spring MVC
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常見問題總結
- Spring Web MVC中的頁面緩存支持 ——跟我學SpringMVC系列
- Spring3 Web MVC下的數據類型轉換(第一篇)——《跟我學Spring3 Web MVC》搶先看
- Spring3 Web MVC下的數據格式化(第二篇)——《跟我學Spring3 Web MVC》搶先看
- 第一章 Web MVC簡介 —— 跟開濤學SpringMVC
- 第二章 Spring MVC入門 —— 跟開濤學SpringMVC
- 第三章 DispatcherServlet詳解 ——跟開濤學SpringMVC
- 第四章 Controller接口控制器詳解(1)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(2)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(3)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解 (4)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(5)——跟著開濤學SpringMVC
- 跟著開濤學SpringMVC 第一章源代碼下載
- 第二章 Spring MVC入門 源代碼下載
- 第四章 Controller接口控制器詳解 源代碼下載
- 第四章 Controller接口控制器詳解(6)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(7 完)——跟著開濤學SpringMVC
- 第五章 處理器攔截器詳解——跟著開濤學SpringMVC
- 源代碼下載 第五章 處理器攔截器詳解——跟著開濤學SpringMVC
- 注解式控制器運行流程及處理器定義 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- 源代碼下載 第六章 注解式控制器詳解
- SpringMVC3強大的請求映射規則詳解 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- Spring MVC 3.1新特性 生產者、消費者請求限定 —— 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC強大的數據綁定(1)——第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC強大的數據綁定(2)——第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC數據類型轉換——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC
- SpringMVC數據格式化——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC
- SpringMVC數據驗證——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC