1. 程式人生 > >spring_對JDBC的支援

spring_對JDBC的支援

7.1  概述

7.1.1  JDBC回顧

       傳統應用程式開發中,進行JDBC程式設計是相當痛苦的,如下所示:

java程式碼: Java程式碼  收藏程式碼
  1. //cn.javass.spring.chapter7. TraditionalJdbcTest  
  2. @Test  
  3. public void test() throws Exception {  
  4.     Connection conn = null;  
  5.     PreparedStatement pstmt = null;  
  6.     try {  
  7.       conn = getConnection();              //1.獲取JDBC連線
      
  8.                                        //2.宣告SQL  
  9.       String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";  
  10.       pstmt = conn.prepareStatement(sql);    //3.預編譯SQL  
  11.       ResultSet rs = pstmt.executeQuery();   //4.執行SQL  
  12.       process(rs);                       //5.處理結果集  
  13.       closeResultSet(rs);                 //5.釋放結果集
      
  14.       closeStatement(pstmt);              //6.釋放Statement  
  15.       conn.commit();                    //8.提交事務  
  16.     } catch (Exception e) {  
  17.       //9.處理異常並回滾事務  
  18.       conn.rollback();  
  19.       throw e;  
  20.     } finally {  
  21.       //10.釋放JDBC連線,防止JDBC連線不關閉造成的記憶體洩漏  
  22.       closeConnection(conn);  
  23.     }  
  24. }  

       以上程式碼片段具有冗長、重複、容易忘記某一步驟從而導致出錯、顯示控制事務、顯示處理受檢查異常等等。

       有朋友可能重構出自己的一套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程式碼  收藏程式碼
  1. //JDBC抽象框架模組  
  2. org.springframework.jdbc-3.0.5.RELEASE.jar       
  3. //Spring事務管理及一致的DAO訪問及非檢查異常模組   
  4. org.springframework.transaction-3.0.5.RELEASE.jar   
  5. //hsqldb驅動,hsqldb是一個開源的Java實現資料庫,請下載hsqldb2.0.0+版本  
  6. hsqldb.jar  

2)傳統JDBC程式設計替代方案:

在使用JdbcTemplate模板類時必須通過DataSource獲取資料庫連線,Spring JDBC提供了DriverManagerDataSource實現,它通過包裝“DriverManager.getConnection”獲取資料庫連線,具體DataSource相關請參考【7.5.1控制資料庫連線】。

java程式碼: Java程式碼  收藏程式碼
  1. package cn.javass.spring.chapter7;  
  2. import java.sql.ResultSet;  
  3. import java.sql.SQLException;  
  4. import org.junit.AfterClass;  
  5. import org.junit.BeforeClass;  
  6. import org.junit.Test;  
  7. import org.springframework.jdbc.core.JdbcTemplate;  
  8. import org.springframework.jdbc.core.RowCallbackHandler;  
  9. import org.springframework.jdbc.datasource.DriverManagerDataSource;  
  10. public class JdbcTemplateTest {  
  11.     private static JdbcTemplate jdbcTemplate;  
  12.     @BeforeClass  
  13.     public static void setUpClass() {  
  14.         String url = "jdbc:hsqldb:mem:test";  
  15.         String username = "sa";  
  16.         String password = "";  
  17.         DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password);  
  18.         dataSource.setDriverClassName("org.hsqldb.jdbcDriver");  
  19.         jdbcTemplate = new JdbcTemplate(dataSource);  
  20.     }  
  21.     @Test  
  22.     public void test() {  
  23.         //1.宣告SQL  
  24.         String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";  
  25.         jdbcTemplate.query(sql, new RowCallbackHandler() {  
  26.             @Override  
  27.             public void processRow(ResultSet rs) throws SQLException {  
  28.                 //2.處理結果集  
  29.                 String value = rs.getString("TABLE_NAME");  
  30.                 System.out.println("Column TABLENAME:" + value);  
  31.             }  
  32.         });  
  33.     }  
  34. }  

接下來讓我們具體分析一下:

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程式碼  收藏程式碼
  1. //程式碼片段(cn.javass.spring.chapter7.JdbcTemplateTest)  
  2. @Before  
  3. public void setUp() {  
  4.    String createTableSql = "create memory table test" + "(id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, " + "name varchar(100))";  
  5.    jdbcTemplate.update(createTableSql);  
  6. }  
  7. @After  
  8. public void tearDown() {  
  9.   String dropTableSql = "drop table test";  
  10.   jdbcTemplate.execute(dropTableSql);  
  11. }  

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.

Springjdbc支援

使用步驟:          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各個技術瞭

SpringJDBC支援 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和springJdbc支援(佟剛)

1.spring的AOPAOP(Aspect-Oriented Programming, 面向切面程式設計):利用的是動態代理技術.好處:每個事物邏輯位於一個位置, 程式碼不分散, 便於維護和升級業務模組更簡潔, 只包含核心業務程式碼.2.在AOP中經常用的到術語:切面(A

J2EE系列之Spring4學習筆記(十)--SpringJDBC支援

一、JdbcDaoSupport類的引入 上一節的工程裡面資料庫操作實現類StudentDaoImpl類中要想使用Spring操作資料庫需要首先定義JdbcTemplate類的物件,這一節我們引入Spring對JDBC支援的JdbcDaoSupport類,首先看一下這個類中

SpringJDBC的模板支持——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和DAOJDBC程序進行進一步優化

cti 使用 let 進一步 stub cep auto 修改 date 采用DTO和DAO對JDBC程序進行進一步優化 DTO:數據傳輸對象,主要用於遠程調用等需要遠程調用對象的地方DAO:數據訪問對象,主要實現封裝數據庫的訪問,通過它可以把數據庫中的表轉換成DTO類 引

SystemIO支援----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.1Lidar支援的魔法力量(一)

    近期研究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的連線資訊後 在這之前我們要將密碼解密  然後再進行