Spring技術內幕(5)數據庫操作組件的實現

本章內容

Spring JDBC的設計與實現、Spring JDBC中模板類的設計與實現、Spring JDBC中RDBMS操作對象的實現、Spring ORM的設計與實現

5.1 Spring JDBC的設計與實現

5.1.1 應用場景

Spring建立的JDBC的框架中,還設計了一種更面向對象的方法,相對於JDBC模板,這種實現更像是一個簡單的ORM工具,爲應用提供了另外一種選擇。

5.1.2 設計概要

Spring JDBC提供了一系列的模板類作爲應用提供便利,在這其中運用到了GOF設計模式中的模板模式,如下圖:

在Spring設計的模板中,大部分封裝了對JDBC和Hibernate處理的通用過程,比如數據庫資源管理、Hibernate的session管理等,在使用時,只需要設計自己定製化的或者和應用相關的部分就可以了。

5.2 Spring JDBC中模板類的設計與實現

5.2.1 設計原理

在Spring JDBC中,JdbcTemplate是一個主要的模板類,繼承關係如圖:

從類繼承關係上來看,JdbcTemplate繼承了基類JdbcAccessor的和接口類JdbcAperation。在基類JdbcAccessor的設計中,對DataSource數據源進行管理和配置。在JdbcOperation接口中,定義了通過JDBC操作數據庫的基本操作方法,而Jdbctemplate提供這些接口方法的實現,比如execute方法、query方法和update方法等。

5.2.2 JdbcTemplate的基本使用

在模板的回調方法doInStatement中嵌入的是用戶對數據庫進行操作的代碼,可以由Spring來完成,或者由客戶應用直接來完成,然後通過JdbcTemplate的execute方法就可以完成相應的數據庫操作。

5.2.3 JdbcTemplate的execute實現

5.2.4 JdbcTemplate的query實現

 

 query方法是通過使用PreparedStatementCallback的回調方法doInPreparedStatement來實現的。在回調函數中,可以看到PreparedStatement的執行,以及查詢結果的返回處理結果。

5.2.5 使用數據庫Connection

在以上這些對數據庫的操作中,使用了輔助類DataSourceUtils。對於DataSource緩衝池的實現,用戶可以通過定義Apache Jakarta Commons DBCP或者C3P0提供的DataSource來完成,然後在IOC容器中配置好後交給JdbcTemplate就可以使用了。

5.3 Spring JDBC中RDBMS操作對象的實現

Spring提供了org.springframework.jdbc.object包,其中包含了SqlQuery、SqlMappingQuery、SqlUpdate和StoredProcedure等類,這些類都是Spring JDBC應用程序可以使用的。

RDBMS對象的基本繼承關係

5.3.1 SqlQuery的實現 

在使用MappingSqlQuery完成這個數據轉換功能的時候,需要用戶擴展一個MappingSqlQuery實現,並在用戶擴展類的初始化函數中對SQL查詢語句和查詢參數進行設置,然後調用compile來完成這些設置。這部分數據轉換代碼會在對數據庫的查詢結束執行,從而完成數據查詢記錄到Java數據對象的轉換。

5.3.2 SqlUpdate的實現

主要提供數據的更新功能。

SqlUpdate的使用非常簡潔,對應用來說,只需要提供具體的參數對象的值,並調用update方法就可以完成整個數據的更新過程,至於數據庫Connection的管理、事務處理場景的處理等在數據庫操作中都會涉及的基本過程,由作爲應用平臺的Spring來處理。SqlUpdate的設計時序

SqlUpdate裏的updateByNameParam方法完成的,使用JdbcTemplate來完成的。

5.3.3 SqlFunction

 SqlFunction類是MappingSqlQuery的子類。SqlFunction基本功能:SqlFunction RDBMS操作類中封裝了一個SQL“函數”包裝器(wrapper),使用這個包裝器可以查詢並返回一個單行結果集,對於這個單行結果集,SqlFunction默認的返回對象是一個int值。

爲了使用SqlFunction,首先要創建一個SqlFunction對象,創建時需要爲它指定數據源和執行的Sql語句。創建完以後,執行compile,然後可以調用SqlFunction的run方法來完成指定的SQL語句的執行,從而得到查詢數據記錄行數的返回結果。

SqlFunction的設計時序

5.4 Spring ORM的設計與實現

5.4.1 應用場景

Spring的ORM包提供了對許多ORM產品的支持。 

5.4.2 設計概要

應用通過Spring使用這些ORM工具時,通常使用Spring提供的Template類(模板類)。在這些模板類裏,封裝了主要的數據操作方法,比如query、update等,並且在Template封裝中,已經包含了前面所說的通用過程,這些通用過程包括Hibernate中的Session的處理、Connection的處理、事務的處理等。

以Template爲核心的類設計

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章