天天看點

【架構】125:spring架構最後一天

一、Spring的JdbcTemplate配置

二、Spring的JdbcTemplate使用

三、Spring的事務管理機制

四、xml配置事務管理

最後

今天是劉小愛自學Java的第125天。

感謝你的觀看,謝謝你。

【架構】125:spring架構最後一天

今天學習内容安排如下:

JdbcTemplate在spring中的配置和使用。

Spring的事務管理機制。

寫了一個轉賬案例,并用xml配置事務。

1最原始的測試

即不使用spring架構時代碼編寫:

【架構】125:spring架構最後一天

①配置資料源

無外乎就是資料庫四大參數的設定。

我們以前都是使用C3p0或者德魯伊,這裡使用的是内置的資料源。

②建立jdbcTemplate對象

使用資料庫初始化jdbcTemplate對象,再通過它實作對資料庫的增删改查。

當然上述都是最原始的測試方法,我們現在學了spring架構,看到new這個關鍵字,就要想到spring的使用。

2spring配置資訊

【架構】125:spring架構最後一天

①資料源的配置

也就是将DriverManagerDataSource交由spring容器管理,同時設定四大參數屬性。

②jdbcTemplate的配置

一樣的道理,以前需要new一個對象,現在都可以在spring中配置成一個bean。

其中該對象需要一個資料源作為參數,是以需要使用到DI依賴注入。

3spring的Junit測試

測試代碼會自動開啟注解掃描,是以就算我們沒有在spring配置檔案中配置也可以使用注解,這個我們昨天就說明過。

【架構】125:spring架構最後一天

其測試代碼注解都是固定的格式。

@RunWith:使用junit整合spring。

@ContextConfiguration:指定spring的位置。

@Autowired注解:注入需要測試的對象。

運作代碼也能查詢到資料庫中的資料。

3使用德魯伊資料源

我們可以将資料庫四大參數設定到properties配置檔案中,再引入外部檔案即可。

【架構】125:spring架構最後一天

①引入外部檔案

property-placeholder:翻譯就是屬性占位符的意思,通過其引入外部檔案。

location:說明外部檔案路徑。

②配置德魯伊連接配接池

以${}的格式引入配置檔案中的屬性。

③配置jdbcTemplate對象

将德魯伊連接配接池注入jdbcTemplate對象。

使用spring配置後,在dao層中測試使用。

1dao層代碼編寫及配置

【架構】125:spring架構最後一天

①xml配置

将jdbcTemplate對象注入userDao,如果用注解的話這裡用@Autowired也是可以的。

xml和注解都使用下,加深對它們的了解。

②根據id查詢使用者

無外乎就是增删改查,這裡使用根據id查詢作為例子說明,查詢結果是一個user對象。

2測試方法

【架構】125:spring架構最後一天

測試方法中直接使用userDao對象調用方法即可,這裡使用注解@Autowired完成注入。

運作代碼能夠得到對應id的user資料。

3dao層代碼優化

為了友善Dao中注入JdbcTemplate,Spring為每一個持久化技術都提供了支援類。

【架構】125:spring架構最後一天

①JdbcDaoSupport類

繼承Spring架構封裝的JdbcDaoSupport類獲得jdbctemplate對象操作資料庫。

通過getJdbcTemplate方法可以擷取對象。

②注入資料源

在xml檔案中給userDao對象注入資料源後即可擷取jdbctemplate對象了。

為什麼會這樣呢?

我們看下JdbcDaoSupport的源碼:

【架構】125:spring架構最後一天

它有一個setDataSource方法,那麼通過注入資料源,即可擷取一個jdbcTemplate對象。

Spring事務管理高層抽象主要包括3個接口,Spring的事務主要是由他們共同完成的:

1PlatformTransactionManager

事務管理器,主要用于平台相關事務的管理,不要看其名字很長,其實很好記:

Platform:平台的意思。

Transaction:事務的意思。

Manager:管理器的意思。

Spring為不同的持久化架構提供了不同的事務管理器接口實作。

【架構】125:spring架構最後一天

DataSourceTransactionManager是我們使用的事務管理器,使用Connection控制 :

開啟事務:connection.setAutoCommit(false)

送出事務:connection.commit()

復原事務:connection.rollback()

2TransactionDefinition

事務定義資訊,用來定義事務相關的屬性的,給事務管理器用。

該接口主要提供的方法:

getIsolationLevel:隔離級别擷取。

getPropagationBehavior:傳播行為擷取。

getTimeout:擷取逾時時間。

isReadOnly:是否隻讀。

關于隔離級别一共有四種:讀未送出、讀已送出、可重複讀和串行化。

在學事務時的筆記中詳細說明過,不再贅述。

關于傳播行為擷取,主要有三大類:

REQUIRED:隻有一個事務(預設,推薦)

REQUIRES_NEW:存在兩個事務,如果事務存在,挂起事務,重新開啟一個新事務。

NESTED:嵌套事務,事務可以設定儲存點,復原到儲存點,選擇送出或者復原。

3TransactionStatus

事務具體運作狀态,事務管理過程中,每個時間點事務的狀态資訊。

上述都是概念性的知識點,比較難記,還是直接用一個轉賬案例說明:

1service層代碼編寫

【架構】125:spring架構最後一天

既然是轉賬,那麼要明确三個參數:出錢方是誰?收錢方是誰?錢是多少?

①先将錢轉出

即從出錢方将對應的錢轉出來。

②再将錢轉入

即将轉出的錢轉入給收錢方。

2dao層代碼編寫

【架構】125:spring架構最後一天

繼承jdbcDaoSupport這個類,通過父類擷取jdbcTemplat對象,這個前面剛說過

③錢轉入

即将收錢人對應賬戶上的金錢增加,增加的錢數為轉賬的錢數。

④錢轉出

即将收錢人對應賬戶上的金錢減少,減少的數量為轉賬的錢數。

3xml配置事務

我們将上述兩層的對象交給spring容器,但是這樣的代碼是有問題的:轉入和轉出要麼同時成功要麼同時失敗,需要使用事務管理。

【架構】125:spring架構最後一天

①配置事務管理器

選擇對應架構的事務管理器即可,并将其交由spring容器管理,同時注入資料源。

②配置事務管理

通過tx:advice标簽配置事務通知,通過屬性transaction-manager說明事務管理器。

其子标簽tx:method,對應了上述TransactionDefinition接口中的四大方法:

read-only:對應isReadOnly()。

timeout:對應getTimeout()。

propagation:對應getPropagationBehavior()。

isolation:對應getIsolationLevel()。

③aop的配置

配置切入點,*Service表示以service為結尾的id或name都被攔截。

配置切面,将對應的切入點增加配置的事務通知,即給切入點增加了一個事務功能。

4測試

【架構】125:spring架構最後一天

在轉入業務中設定一個運作異常作為測試。

如果沒有配置事務的話:

轉出業務成功,對應賬戶錢減少了。

轉入業務失敗,對應賬戶錢并沒有增加。

如果配置事務了的話,隻要一方失敗了,全部都算失敗,資料并不發生變化。

關于注解,會使用xml了注解就很簡單了,以後有類似需求時使用注解說明,就不專門寫一篇文章了,明天開始學springMVC架構了。

謝謝你的觀看。

如果可以的話,麻煩幫忙點個贊,謝謝你。