SpringJDBC 是Spring所提供的持久層技術。它的重要目的是降低使用JDBCAPI的門檻,以一種更直接,更簡潔的方式使用JDBC API。 在SpringJDBC裏,用戶僅需要做那些必不可少的事,而將資源獲取、statement創建、異常處理、資源釋放等繁雜乏味的工作交給Spring。如果你不適用ORM框架來完成對象與實體的映射,那JDBC就是最好的選擇,更何況他還那麼靈活。
在面試或者之前的項目中,經常會需要手動將JDBC中步驟完成,那現在就不需要這樣了,只需要將鏈接,數據庫信息寫到配置文件中,然後在Spring配置文件中得到其值,剩下的就可以交給Spring了,而你只需要將SQL及其參數正確的傳給JDBC模板,就可以了。
下面這個是jdbc.properties 文件中關於數據信息的配置,示例如下:
下圖是applicationContext-dataSource.xml 文件,下圖中將在服務器啓動時創建鏈接等等操作,在使用時直接使用即可。
上面這個圖的意思是導入相關的JDBC配置文件,然後得到其值,在使用的時候可以使用JDBC的JDBCTemplate模板信息。
SpringJDBC是用JDBC.properties配置數據庫信息,然後在applicationContext.xml中加載入,在這個項目中使用的是dbcp連接池,
使用jdbcTemplate聲明。
使用jdbcTemplate聲明。
基本的數據操作
數據庫的CRUD以及存儲過程調用時最基本的數據庫操作,jdbcTemplate提供了衆多的方法,通過JdbcTemplate,用戶可以用簡單的方法完成這些數據操作。
由於本人在項目中很少使用這樣的方式,所以就直接使用書中源代碼來研究了。
JdbcTemplate在內部通過PreoparedStatement執行SQL語句,所以可以使用綁定參數的SQL。
JdbcTemplate已經把原來複雜數據更新操作簡化爲定義SQL語句,準備參數,調用 sql 這三個簡單的步驟。
如下圖是很久之前的一段代碼:
這段代碼就是SpringJDBC來做操作的,將前端傳入的參數作爲sql的參數,並調用相應的sql來完成操作。
實戰經驗:
儘量使用可綁定參數的sql語句,以便數據庫可以複用SQL的執行計劃,提高數據庫的執行效率。此外,應儘量在Dao中使用類級別的靜態常量的(final
static)定義SQL字符串,不應在方法內部聲明SQL字符串變量,以提高JVM的內存使用效率。
如下圖:
調用SQL的代碼如下:
通過這種方式,就可以讓數據庫使用其執行計劃(數據庫概念)。通過這種將SQL抽離出來成爲常量的方式來提高JVM效率。
需要指出的是,在實際使用中, 應當優先考慮使用不帶回調接口的JdbcTemplate方法。首先,回調使代碼顯得臃腫其次,回調並不能給我們帶來額外的好處。
返回數據庫的表自增主鍵值
在項目中經常要用到自增主鍵值,而主鍵值是在插入數據之後才能得到的,在Hibernate中,新對象持久化之後,主鍵值會自動綁定到對象上,給程序的開發帶來了很大的方便。
但是有一個問題:怎麼在高併發的情況下,執行操作的過程中保證主鍵不會重複。
批量操作
如果需要一次性插入或更新多條記錄,當然可以簡單的通過調用update()方法完成任務,但這不是最好的實現方案。更好的選擇是使用JdbcTemplate批量更改數據的方法。一般情況下,後者擁有更好的性能,因爲更新的數據將被批量發送到數據庫中,它減少了對數據庫訪問的次數。這個本人用的比較少。
用的最多的是一次性插入很多數據,但是沒有采用書中所說方法,用的是將值放到list中,然後對list進行循環,之後調用sql語句,完成操作。
這裏介紹的是SpringJDBC,沒有采用ORMapping框架。