傳統應用程序開發中,進行JDBC編程是至關痛苦的,以下所示:java
//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); } }
以上代碼片斷具備冗長、重複、容易忘記某一步驟從而致使出錯、顯示控制事務、顯示處理受檢查異常等等。spring
有朋友可能重構出本身的一套JDBC模板,從而能簡化平常開發,但本身開發的JDBC模板不夠通用,並且對於每一套JDBC模板實現都差很少,從而致使開發人員必須掌握每一套模板。sql
Spring JDBC提供了一套JDBC抽象框架,用於簡化JDBC開發,並且若是各個公司都使用該抽象框架,開發人員首先減小了學習成本,直接上手開發,如圖7-1所示。數據庫
圖7-1 Spring JDBC與傳統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等類。這些類的實現一旦創建便可重用而且是線程安全的。app
SimpleJdbc方式:Spring JDBC框架還提供了SimpleJdbc方式來簡化JDBC編程,SimpleJdbcInsert 、 SimpleJdbcCall用來簡化數據庫表插入、存儲過程或函數訪問。框架
Spring JDBC還提供了一些強大的工具類,如DataSourceUtils來在必要的時候手工獲取數據庫鏈接等。
Spring JDBC抽象框架由四部分組成:datasource、support、core、object。如圖7-2所示。
support包:提供將JDBC異常轉換爲DAO非檢查異常轉換類、一些工具類如JdbcUtils等。
datasource包:提供簡化訪問JDBC 數據源(javax.sql.DataSource實現)工具類,並提供了一些DataSource簡單實現類從而能使從這些DataSource獲取的鏈接能自動獲得Spring管理事務支持。
core包:提供JDBC模板類實現及可變部分的回調接口,還提供SimpleJdbcInsert等簡單輔助類。
object包:提供關係數據庫的對象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等類,該包是基於core包JDBC模板類實現。