JdbcTemolate類的介紹 JdbcTemplate是Spring JDBC的核心類,封裝了常見的JDBC的用法,同時儘量避免常見的錯誤。該類簡化JDBC的操作,我們只需要書寫提供SQL的代碼和如何返回的結果的代碼。JdbcTemplate可以執行查詢、更新等操作、初始化對ResultSets ...
JdbcTemolate類的介紹<一>
JdbcTemplate是Spring JDBC的核心類,封裝了常見的JDBC的用法,同時儘量避免常見的錯誤。該類簡化JDBC的操作,我們只需要書寫提供SQL的代碼和如何返回的結果的代碼。JdbcTemplate可以執行查詢、更新等操作、初始化對ResultSets的遍歷操作以及捕獲JDBC異常並將其轉換成在org.springframework.dao包下定義的更常規更有用的異常類。
通過實現回調介面,可以自定義這些回調函數的具體操作。其中,PreparedStatementSetter和RowMapper是兩個最常用的回調介面。
所有的SQL的操作都被以org.springframework.jdbc.core.JdbcTemplate下的debug級別的日誌所記錄。
說明:該類的實例在配置後是線程安全
JdbcAccessor類介紹
JdbcAccessor類是JdbcTemplate類的基類,用於處理JDBC的連接操作,同時也定義數據源、異常翻譯器等常用屬性。
JdbcOperations介面介紹
JdbcOperations介面定義了JDBC的一些基本操作,具體實現則放在JdbcTemplate類中,不推薦直接使用,但是由於比較適合於mock和stub,因此在測試的時候是一個非常好的選擇。
JdbcTemplate的變數
ignoreWarnings
如果該變數為false,那麼將拋出JDBC警告(SQL warnings)。預設為true。
說明:SQL Warnings 來處理不太嚴重的異常情況、非致命錯誤或意想不到的條件,因此可以忽略它們。
fetchSize
如果該變數為非負值,那將賦值給用於執行查詢的statements的fetchSize變數。預設為-1。
maxRows
如果該變數為非負值,那將賦值給用於執行查詢的statements的maxRows變數。預設為-1。
queryTimeout
如果該變數為非負值,那將賦值給用於執行查詢的statements的queryTimeout變數。預設為-1。
skipResultsProcessing
如果該變數為true, 那麼所有可調用語句處理都將繞過所有結果檢查,這可以用來避免一些早期版本oracle jdbc驅動程式(如 10.1.0.2)中的bug。預設為false。
skipUndeclaredResults
如果該變數為true,那麼有輸出參數的存儲過程的調用結果檢查將被省略,除非skipResultsProcessing為true,否側其他返回結果都將被處理。預設為false。
dataSource
該變數為javax.sql.DataSource類型,從JdbcAccessor類繼承而來,可以為null,但是在Spring初始化Bean的時候會檢查該變數,如果為null,將拋出IllegalArgumentException,提示"Property 'dataSource' is required"。
exceptionTranslator
該變數屬於一個函數式介面,用於將SQLException和Spring自定義的DataAccessException轉化,從JdbcAccessor類繼承而來,可以為null。
lazyInit
如果該變數為true,那麼知道第一次遇到SQLException,否則不初始化exceptionTranslator。預設為true。
因為JdbcAccessor類繼承了InitializingBean介面,而JdbcTemplate類由繼承了JdbcAccessor類,因此Spring初始化JdbcTemplate這個bean的時候會調用afterPropertiesSet。此時如果lazyInit為false且exceptionTranslator,那麼則將對exceptionTranslator嘗試初始化,如果dataSource為null則使用SQLStateSQLExceptionTranslator進行初始化,否則使用SQLErrorCodeSQLExceptionTranslator。
nativeJdbcExtractor
自定義本地JDBC操作對象,用於操作非標準的JDBC API。
為了更好支持JDBC4,SpringFramework工作組於2017年6月7號在Github上的master分支上刪除了nativeJdbcExtractor,但其他分支還存在該變數,尚不清楚為了是否恢復該變數