1. 程式人生 > >【Spring4(三)】Spring的事務管理和JDBC模板的使用

【Spring4(三)】Spring的事務管理和JDBC模板的使用

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中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置,也可以回滾到儲存點。
        在這裡插入圖片描述

Spring的事務管理

搭建Spring的事務管理的環境

  • 建立Service的介面和實現類
    在這裡插入圖片描述
  • 建立DAO的介面和實現類
    在這裡插入圖片描述
  • 配置Service和DAO:交給Spring管理
    在這裡插入圖片描述
  • 在DAO中編寫扣錢和加錢方法:
    • 配置連線池和JDBC的模板
      在這裡插入圖片描述
    • 在DAO注入Jdbc的模板:
      在這裡插入圖片描述
  • 測試

Spring的事務管理:一類:程式設計式事務(需要手動編寫程式碼)–瞭解

第一步:配置平臺事務管理器

在這裡插入圖片描述

第二步:Spring提供了事務管理的模板類

  • 配置事務的管理的模板類
    在這裡插入圖片描述

第三步:在業務層注入事務管理的模板

在這裡插入圖片描述

編寫事務管理的程式碼

在這裡插入圖片描述

測試

Spring的事務管理:二類:宣告式事務管理(通過配置實現)—AOP

XML方式的宣告式事務管理

  • 第一步:引入aop的開發包
  • 第二步:恢復轉賬環境
  • 第三步:配置事務管理器
    在這裡插入圖片描述
  • 第四步:配置增強
    在這裡插入圖片描述
  • 第五步:AOP的配置
    在這裡插入圖片描述
  • 測試

註解方式的宣告式事務管理

  • 第一步:引入aop的開發包
  • 第二步:恢復轉賬環境
  • 第三步:配置事務管理器
    在這裡插入圖片描述
  • 第四步:開啟註解事務
    在這裡插入圖片描述
  • 第五步:在業務層添加註解
    在這裡插入圖片描述