一些xml與對應的註解
載入jdbc的檔案 ----@propertysource
-----------@componentscan
如果要使用註解注入或者set方式注入,都必須要先將物件加入到ioc容器中,註解用@bean,xml用
###事務:
一組最小單位的執行單元(一組sql語句),要麼一起成功,要麼一起失敗!!
事務的四個特性(acid)?
原子性(a):如果使用事務控制對操作進行控制,這些操作要麼一起成功,要麼一起失敗!!
一致性(c):事務可以讓資料庫從乙個一致性狀態切換到另乙個一致性的狀態**賬總額不變)
隔離性(i):多個併發事務之間應該相互隔離。
如果多個併發事務隔離出問題,可能導致以下現象:
1)髒讀:乙個事務讀到另乙個未提交的資料(必須防止的)
2)不可重複讀:乙個事務讀到另乙個已經提交的更新(update)資料
3)幻讀(虛讀) : 乙個事務讀到另乙個已經提交的插入(insert)資料
注意: 1)mysql的預設隔離級別:repeatable read
oracle的預設隔離級別: read committed
2)隔離級別越高,事務併發效能越差
匯入spring-tx包,檢視api
>
>
org.springframeworkgroupid
>
>
spring-txartifactid
>
>
5.0.2.releaseversion
>
dependency
>
|- platformtransactionmanager 頂層介面 (spring-tx) (spring提供用於進行事務控制的方法的介面)
|- datasourcetransactionmanager 實現類 (spring-jdbc)
(spring提供用於進行事務控制的方法的實現**,底層呼叫jdbc事務控制**)
|- hibernatetransactionmanager 實現類(spring-orm)(spring提供對hibernate事務控制實現)
|- jpatransactionmanager 實現 (spring-orm)(spring提供對jpa事務控制實現)
作用:設定事務的隔離級別
設定事務的傳播行為(設定事務的邊界!)
propagation_required: 預設值,必須讓當前(業務)方法在事務的控制下執行。
如果該方法沒有事務,自動新增事務
如果該方法已經有了事務,直接使用當前事務。
專案的常用的方法:增加,刪除,更新方法!
propagation_supports: 讓當前(業務)方法在可選事務中執行(事務可有可無)
如果該方法沒有事務,該方法就沒有事務。
如果該方法已經有了事務,直接使用當前事務。
專案的常用的方法:查詢方法!
(xml實現事務配置)專案演示步驟:
<?xml version="1.0" encoding="utf-8"?>
測試
ackage com.huihui.test;
import com.huihui.pojo.account;
import com.huihui.service.accountservice;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.test.context.contextconfiguration;
import org.springframework.test.context.junit4.springjunit4classrunner;
/** * 測試事務控制
*/@runwith(springjunit4classrunner.class)
public class demo1
}
(xml+註解實現事務配置)專案演示步驟:
要在業務類上新增:@transactional註解
賬戶service實現
* @transactional 註解的使用
* 1.位置問題
* 1.2 業務類的方法上: 對某個類的方法新增事務控制
* 1.3 業務介面上: 對介面宣告的所有方法新增事務控制
* 1.3 業務介面的方法上: 對介面宣告的指定方法新增事務控制
* * 注意:類和方法同時存在,優先使用方法上的
* 2.屬性問題
* transactionmanager: 引用的事務管理器的id
* 預設@transactional根據型別進行注入
* 如果有多個型別才會按照名稱進行注入
* value: 和transactionmanager的值一樣的
* * isolation: 設定事務的隔離級別
* propagation: 設定事務的傳播行為
* rollbackfor: (理論)針對某些異常進行事務回滾 (實際測試,所有異常都可以進行事務控制 )
* norollbackfor: 針對某些異常不進行事務回滾 (實際測試是ok的)
*/@transactional(isolation = isolation.default,
propagation = propagation.required,
norollbackfor = nullpointerexception.class ) // 事務註解
public class accountserviceimpl implements accountservice
}
(純註解實現事務配置)專案演示步驟:
配置類:
/**
* 配置類
*/@configuration
@componentscan(basepackages = "com.huihui")
@enabletransactionmanagement // 開啟事務管理註解掃瞄,代替:@import(jdbcconfig.class) //匯入資料來源配置類
public class springconfig
資料來源配置類:
/**
* 資料來源配置類
*/@propertysource("jdbc.properties")
public class jdbcconfig ")
private string url;
@value("$")
private string driver;
@value("$")
private string username;
@value("$")
private string password;
/*** 建立資料來源
*/@bean("datasource") // 放入spring的ioc容器
public datasource createdatasource()
/*** 建立jdbctemplate
* @qualifier("datasource") datasource datasource: 在springioc容器查詢乙個datasource的物件,注入進來
*/@bean("jdbctemplate")
public jdbctemplate createjdbctemplate(@qualifier("datasource") datasource datasource)
/*** 建立事務管理器
*/@bean("transactionmanager")
public datasourcetransactionmanager createtransactionmanager(@qualifier("datasource") datasource datasource)
}
Spring宣告式事務
net.sf.hibernate.dialect.oracle9dialect false true net.sf.hibernate.transaction.jdbctransactionfactory 1025 用heibernate來管理事務 當用spring和heibernate一起完成da...
spring宣告式事務
1.什麼是事務 事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性 要麼成功,要麼失敗 2.事務的特性 事務特性分為四個 原子性 atomicity 一致性 consistency 隔離性 isolation 持續性 durability ...
Spring 宣告式事務
propagation 事務傳播機制有如下幾種 required 預設值,表示如果存在乙個事務,則支援當前事務 如果沒有事務,則開啟乙個新事務。requires new 表示總是開啟乙個新的事務,如果乙個事務已經存在,則將這個存在的事務掛起,開啟新事務執行該方法。mandatory 表示如果存在乙個...