spring_對JDBC的支援
7.1 概述
7.1.1 JDBC回顧
傳統應用程式開發中,進行JDBC程式設計是相當痛苦的,如下所示:
java程式碼: 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);
-
}
- }
以上程式碼片段具有冗長、重複、容易忘記某一步驟從而導致出錯、顯示控制事務、顯示處理受檢查異常等等。
有朋友可能重構出自己的一套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模板類實現。
7.2 JDBC模板類
7.2.1 概述
Spring JDBC抽象框架core包提供了JDBC模板類,其中JdbcTemplate是core包的核心類,所以其他模板類都是基於它封裝完成的,JDBC模板類是第一種工作模式。
JdbcTemplate類通過模板設計模式幫助我們消除了冗長的程式碼,只做需要做的事情(即可變部分),並且幫我們做哪些固定部分,如連線的建立及關閉。
JdbcTemplate類對可變部分採用回撥介面方式實現,如ConnectionCallback通過回撥介面返回給使用者一個連線,從而可以使用該連線做任何事情、StatementCallback通過回撥介面返回給使用者一個Statement,從而可以使用該Statement做任何事情等等,還有其他一些回撥介面如圖7-3所示。
圖7-3 JdbcTemplate支援的回撥介面
Spring除了提供JdbcTemplate核心類,還提供了基於JdbcTemplate實現的NamedParameterJdbcTemplate類用於支援命名引數繫結、 SimpleJdbcTemplate類用於支援Java5+的可變引數及自動裝箱拆箱等特性。
7.2.3 傳統JDBC程式設計替代方案
前邊我們已經使用過傳統JDBC程式設計方式,接下來讓我們看下Spring JDBC框架提供的更好的解決方案。
1)準備需要的jar包並新增到類路徑中:
java程式碼: Java程式碼- //JDBC抽象框架模組
- org.springframework.jdbc-3.0.5.RELEASE.jar
- //Spring事務管理及一致的DAO訪問及非檢查異常模組
- org.springframework.transaction-3.0.5.RELEASE.jar
- //hsqldb驅動,hsqldb是一個開源的Java實現資料庫,請下載hsqldb2.0.0+版本
- hsqldb.jar
2)傳統JDBC程式設計替代方案:
在使用JdbcTemplate模板類時必須通過DataSource獲取資料庫連線,Spring JDBC提供了DriverManagerDataSource實現,它通過包裝“DriverManager.getConnection”獲取資料庫連線,具體DataSource相關請參考【7.5.1控制資料庫連線】。
java程式碼: Java程式碼- package cn.javass.spring.chapter7;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.junit.AfterClass;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowCallbackHandler;
- import org.springframework.jdbc.datasource.DriverManagerDataSource;
- public class JdbcTemplateTest {
- private static JdbcTemplate jdbcTemplate;
- @BeforeClass
- public static void setUpClass() {
- String url = "jdbc:hsqldb:mem:test";
- String username = "sa";
- String password = "";
- DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password);
- dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
- jdbcTemplate = new JdbcTemplate(dataSource);
- }
- @Test
- public void test() {
- //1.宣告SQL
- String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";
- jdbcTemplate.query(sql, new RowCallbackHandler() {
- @Override
- public void processRow(ResultSet rs) throws SQLException {
- //2.處理結果集
- String value = rs.getString("TABLE_NAME");
- System.out.println("Column TABLENAME:" + value);
- }
- });
- }
- }
接下來讓我們具體分析一下:
1) jdbc:hsqldb:mem:test:表示使用hsqldb記憶體資料庫,資料庫名為“test”。
2) public static void setUpClass():使用junit的@BeforeClass註解,表示在所以測試方法之前執行,且只執行一次。在此方法中定義了DataSource並使用DataSource物件建立了JdbcTemplate物件。JdbcTemplate物件是執行緒安全的。
3) JdbcTemplate執行流程:首先定義SQL,其次呼叫JdbcTemplate方法執行SQL,最後通過RowCallbackHandler回撥處理ResultSet結果集。
Spring JDBC解決方法相比傳統JDBC程式設計方式是不是簡單多了,是不是隻有可變部分需要我們來做,其他的都由Spring JDBC框架來實現了。
接下來讓我們深入JdbcTemplate及其擴充套件吧。
7.2.4 JdbcTemplate
首先讓我們來看下如何使用JdbcTemplate來實現增刪改查。
一、首先建立表結構:
java程式碼: Java程式碼- //程式碼片段(cn.javass.spring.chapter7.JdbcTemplateTest)
- @Before
- public void setUp() {
- String createTableSql = "create memory table test" + "(id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, " + "name varchar(100))";
- jdbcTemplate.update(createTableSql);
- }
- @After
- public void tearDown() {
- String dropTableSql = "drop table test";
- jdbcTemplate.execute(dropTableSql);
- }
1) org.junit包下的@Before和@After分別表示在測試方法之前和之後執行的方法,對於每個測試方法都將執行一次;
2) create memory table test表示建立hsqldb記憶體表,包含兩個欄位id和name,其中id是具有自增功能的主鍵,如果有朋友對此不熟悉hsqldb可以換成熟悉的資料庫。
相關推薦
spring_對JDBC的支援
7.1 概述 7.1.1 JDBC回顧 傳統應用程式開發中,進行JDBC程式設計是相當痛苦的,如下所示: java程式碼: Java程式碼 //cn.javass.spring.chapter7.
Spring對jdbc支援
使用步驟: 1)引入jar檔案 spring-jdbc-3.2.5.RELEASE.jar spring-tx-3.2.5.RELEASE.jar &n
第八講:8.1 spring 對JDBC支援
Spring將替我們完成所有使用JDBC API進行開發的單調乏味的、底層細節處理工作。 操作JDBC時Spring可以幫我們做這些事情: 定義資料庫連線引數,開啟資料庫連線,處理異常,關閉資料庫連線 我們僅需要關注: 宣告SQL語句,處理每一次得到的結果 一個
Spring 對JDBC的支援
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 資料庫連結 兩步 一、對映配置檔案 二、c3p0Bean--> <bean id="Data
Spring專案對JDBC的支援和基本使用
歡迎檢視Java開發之上帝之眼系列教程,如果您正在為Java後端龐大的體系所困擾,如果您正在為各種繁出不窮的技術和各種框架所迷茫,那麼本系列文章將帶您窺探Java龐大的體系。本系列教程希望您能站在上帝的角度去觀察(瞭解)Java體系。使Java的各種後端技術在你心中模組化;讓你在工作中能將Java各個技術瞭
Spring對JDBC的支援 Jdbc Template模板類
概述 Spring JDBC抽象框架core包提供了JDBC模板類,其中JdbcTemplate是core包的核心類,所以其他模板類都是基於它封裝完成的,JDBC模板類是第一種工作模式。 JdbcTemplate類通過模板設
xml方式實現spring的宣告式事務管理及對jdbc操作的支援
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
spring知識七------對JDBC的支援
概述 spring框架也是集成了對JDBC資料庫的操作,但是要明白的是spring對JDBC的支援只是一個簡單的封裝,而不是真正意義上的ORM框架,其中最主要的就是Spring對資料庫的操作不支援級聯操作,即對於存在外來鍵關聯的表,查詢資料時,不會連帶查詢。但
Spring的AOP和spring對Jdbc的支援(佟剛)
1.spring的AOPAOP(Aspect-Oriented Programming, 面向切面程式設計):利用的是動態代理技術.好處:每個事物邏輯位於一個位置, 程式碼不分散, 便於維護和升級業務模組更簡潔, 只包含核心業務程式碼.2.在AOP中經常用的到術語:切面(A
J2EE系列之Spring4學習筆記(十)--Spring對JDBC的支援
一、JdbcDaoSupport類的引入 上一節的工程裡面資料庫操作實現類StudentDaoImpl類中要想使用Spring操作資料庫需要首先定義JdbcTemplate類的物件,這一節我們引入Spring對JDBC支援的JdbcDaoSupport類,首先看一下這個類中
Spring對JDBC的模板支持——JdbcTemplate
Java開發 Spring JdbcTemplate JDBC模板 Spring的JdbcTemplate是一個對JDBC的模板封裝,它提供了一套JDBC的模板,能讓我們寫持久層代碼時減少多余的代碼,簡化JDBC代碼,使代碼看起來更簡潔。在介紹Spring的JdbcTemplate使用方法之前
spring3: 對JDBC的支持 之 Spring提供的其它幫助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主鍵/批量處理
4.3 復合 AC lex con add 兩個 HR sel 7.4 Spring提供的其它幫助 7.4.1 SimpleJdbc方式 Spring JDBC抽象框架提供SimpleJdbcInsert和SimpleJdbcCall類,這兩個類通過利用J
采用DTO和DAO對JDBC程序進行進一步優化
cti 使用 let 進一步 stub cep auto 修改 date 采用DTO和DAO對JDBC程序進行進一步優化 DTO:數據傳輸對象,主要用於遠程調用等需要遠程調用對象的地方DAO:數據訪問對象,主要實現封裝數據庫的訪問,通過它可以把數據庫中的表轉換成DTO類 引
System對IO支援----System.out/System.in
這篇部落格裡介紹了列印流PrintSream類,PrintSream類的方法print()和println(),可以聯想到系統輸出System.out.println(),也及時說系統輸出利用了IO流的模式完成。在System類中定義了3個操作的常量。 標準輸出(顯示器):pub
Java進階學習第二十三天(Spring框架:代理模式、AOP程式設計、jdbc支援)
一、共性問題 1、伺服器啟動報錯,什麼原因? ① jar包缺少或者jar包衝突 ◆ 先檢查專案中是否缺少jar包引用 ◆ 伺服器:檢查jar包有沒有釋出到伺服器下;使用者庫jar包,需要手動釋出到tomcat(每次新建專案) ◆ 重新發布專案 ② 配置檔案錯誤(
ArcGIS 10.1對Lidar支援的魔法力量(一)
近期研究ArcGIS對Lidar的支援,有一驚喜。像愛麗絲在夢遊仙境,發現了ArcGIS 10.1的神奇魔法! 之所以這麼說,是因為在Lidar支援方面,ArcGIS 10.1較ArcGIS 10來說,有了質的飛躍。 ArcGIS 10中,如果使用
spring框架對 remoting 支援的總結
spring 作為一個基礎框架,最remoting(遠端呼叫)有多種支援。 對傳統RMI方式的支援 ,RMI是java 平臺上最傳統的 遠端呼叫方法,這種方法基於Java Remote Method
Java小寫金額轉換大寫與金額比對(支援繁體大寫金額)
package com.gerrard.pmc.util; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; /** * 金額工具
java之對JDBC的完整封裝(相容多種資料庫)
目前此程式碼我只用過mysql和oracle資料庫測試過,但相信其它資料庫都是可以的,只要匯入你需要操作的資料庫jar包,驅動等就可,下面上程式碼: import java.sql.CallableStatement; import java.sql.Connection
對jdbc.properties中的密碼加密
為什麼對jdbc檔案加密:如果jdbc中的使用者名稱和密碼配置為明文 這樣別人就很容易連線上伺服器 為了安全考慮 將jdbc中的密碼配成加密檔案 一、建立加密和解密的Util 二、當我們在spring中配置了jdbc的連線資訊後 在這之前我們要將密碼解密 然後再進行