【Spring4(三)】Spring的事務管理和JDBC模板的使用
阿新 • • 發佈:2018-12-21
Spring 的 AOP 的基於 AspectJ 註解開發
Spring 的基於AspectJ 的註解的 AOP 開發
建立專案,引入 jar 包
引入配置檔案
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd" >
</beans>
編寫目標類並配置
編寫切面類並配置
使用註解的AOP物件目標類進行增強
- 在配置檔案中開啟註解的AOP開發
- 在切面類上使用註解
編寫測試類
Spring的註解的AOP的通知型別
@Before :前置通知
@AfterReturning :後置通知
@Around :環繞通知
@AfterThrowing :異常丟擲通知
@After :最終通知
Spring的註解的AOP的切入點的配置
Spring的AOP的註解切入點的配置
Spring的 JDBC 的模板的使用
Spring的JDBC的模板
Spring是EE開發的一站式的框架,有EE開發的每層的解決方案。Spring對持久層也提供瞭解決方案:ORM模組和JDBC的模板。
Spring提供了很多的模板用於簡化開發:
JDBC模板使用的入門
- 建立專案,引入jar包
- 引入基本開發包
- 資料庫驅動
- Spring的JDBC模板的jar包
- 引入基本開發包
建立資料庫和表
create database spring4_day03;
use spring4_day03;
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
使用JDBC的模板:儲存資料
將連線池和模板交給Spring管理
引入Spring的配置檔案
使用Jdbc的模板
- 引入spring_aop的jar包
使用開源的資料庫連線池
DBCP的使用
- 引入jar包
- 配置DBCP連線池
C3P0的使用
- 引入c3p0連線池jar包
- 配置c3p0連線池
抽取配置到屬性檔案
定義一個屬性檔案
在Spring的配置檔案中引入屬性檔案
- 第一種:
- 第二種
引入屬性檔案的值
測試
使用JDBC的模板完成CRUD的操作
儲存操作
修改操作
刪除操作
查詢操作
- 查詢某個屬性
- 查詢返回物件或集合
- 資料封裝
Spring的事務管理
事務的回顧
什麼是事務
事務:邏輯上的一組操作,組成這組操作的各個單元,要麼全都成功,要麼全都失敗。
事務的特性
- 原子性:事務不可分割
- 一致性:事務執行前後資料完整性保持一致
- 隔離性:一個事務的執行不應該受到其他事務的干擾
- 永續性:一旦事務結束,資料就持久化到資料庫
如果不考慮隔離性引發安全性問題
- 讀問題
- 髒讀 :一個事務讀到另一個事務未提交的資料
- 不可重複讀 :一個事務讀到另一個事務已經提交的update的資料,導致一個事務中多次查詢結果不一致
- 虛讀、幻讀 :一個事務讀到另一個事務已經提交的insert的資料,導致一個事務中多次查詢結果不一致。
- 寫問題
- 丟失更新
解決讀問題
- 設定事務的隔離級別
- Read uncommitted :未提交讀,任何讀問題解決不了。
- Read committed :已提交讀,解決髒讀,但是不可重複讀和虛讀有可能發生。
- Repeatable read :重複讀,解決髒讀和不可重複讀,但是虛讀有可能發生。
- Serializable :解決所有讀問題。
Spring的事務管理的API
PlatformTransactionManager:平臺事務管理器
- 平臺事務管理器:介面,是Spring用於管理事務的真正的物件。
- DataSourceTransactionManager :底層使用JDBC管理事務
- HibernateTransactionManager :底層使用Hibernate管理事務
TransactionDefinition :事務定義資訊
- 事務定義:用於定義事務的相關的資訊,隔離級別、超時資訊、傳播行為、是否只讀
TransactionStatus:事務的狀態
- 事務狀態:用於記錄在事務管理過程中,事務的狀態的物件。
事務管理的API的關係
Spring進行事務管理的時候,首先平臺事務管理器根據事務定義資訊進行事務的管理,在事務管理過程中,產生各種狀態,將這些狀態的資訊記錄到事務狀態的物件中。
Spring的事務的傳播行為
Spring的傳播行為
- Spring中提供了七種事務的傳播行為:
- 保證多個操作在同一個事務中
- PROPAGATION_REQUIRED :預設值,如果A中有事務,使用A中的事務,如果A沒有,建立一個新的事務,將操作包含進來
- PROPAGATION_SUPPORTS :支援事務,如果A中有事務,使用A中的事務。如果A沒有事務,不使用事務。
- PROPAGATION_MANDATORY :如果A中有事務,使用A中的事務。如果A沒有事務,丟擲異常。
- 保證多個操作不在同一個事務中
- PROPAGATION_REQUIRES_NEW :如果A中有事務,將A的事務掛起(暫停),建立新事務,只包含自身操作。如果A中沒有事務,建立一個新事務,包含自身操作。
- PROPAGATION_NOT_SUPPORTED :如果A中有事務,將A的事務掛起。不使用事務管理。
- PROPAGATION_NEVER :如果A中有事務,報異常。
- 巢狀式事務
- PROPAGATION_NESTED :巢狀事務,如果A中有事務,按照A的事務執行,執行完成後,設定一個儲存點,執行B中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置,也可以回滾到儲存點。
- PROPAGATION_NESTED :巢狀事務,如果A中有事務,按照A的事務執行,執行完成後,設定一個儲存點,執行B中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置,也可以回滾到儲存點。
- 保證多個操作在同一個事務中
Spring的事務管理
搭建Spring的事務管理的環境
- 建立Service的介面和實現類
- 建立DAO的介面和實現類
- 配置Service和DAO:交給Spring管理
- 在DAO中編寫扣錢和加錢方法:
- 配置連線池和JDBC的模板
- 在DAO注入Jdbc的模板:
- 配置連線池和JDBC的模板
- 測試
Spring的事務管理:一類:程式設計式事務(需要手動編寫程式碼)–瞭解
第一步:配置平臺事務管理器
第二步:Spring提供了事務管理的模板類
- 配置事務的管理的模板類
第三步:在業務層注入事務管理的模板
編寫事務管理的程式碼
測試
Spring的事務管理:二類:宣告式事務管理(通過配置實現)—AOP
XML方式的宣告式事務管理
- 第一步:引入aop的開發包
- 第二步:恢復轉賬環境
- 第三步:配置事務管理器
- 第四步:配置增強
- 第五步:AOP的配置
- 測試
註解方式的宣告式事務管理
- 第一步:引入aop的開發包
- 第二步:恢復轉賬環境
- 第三步:配置事務管理器
- 第四步:開啟註解事務
- 第五步:在業務層添加註解