外部配置檔案的好處,動態獲取本機配置:方便由於機器不同導致的配置不同,否則每次覆蓋還要重新修訂 配置資訊;
spring想要加入乙個持久層框架,只需要將這個框架實現乙個介面
==platformtransactionmanager==
實現了這個介面的 有很多,例如hibernatetransactionmanager(有兩個,乙個3.0,乙個4.0)
class="org.springframework.beans.factory.config.preferencesplaceholderconfigurer">
name="locations">
database.propertiesvalue>
list>
property>
bean>
id="dbcp_datesource"
class="org.apache.commons.dbcp.basicdatasource">
name="driverclassname"
value="$">
property>
name="url"
value="$">
property>
name="username"
value="$">
property>
name="password"
value="$">
property>
name="defaultautocommit"
value="false">
property>
name="initialsize"
value="5">
property>
bean>
id="sessionfactory"
class="org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean">
name="datasource"
ref="dbcp_datesource">
property>
name="hibernateproperties">
key="hibernate.show_sql">trueprop>
key="hibernate.format_sql">trueprop>
key="hibernate.dialect">org.hibernate.dialect.mysql5dialectprop>
props>
property>
name="packagestoscan"
value="com.wang.model">
property>
bean>
配置事務管理器
涉及到的類:
- ==transactionproxyfactorybean==,位於transaction包內。
- hibernate==transactionmanager==,位於orm包內
使用spring繫結的hibernatetransactionmanager;事務屬性已經將session與本地執行緒繫結了,取得session的時候直接使用
sessionfactory.getcurrentsession即可,因此不需要再使用通知,spring容器已經幫我們自動完成session對dao的攔截與通知
spring的事務傳播方式
可選引數
spring的事務隔離級別
一般使用第三種隔離級別
髒讀:發生在乙個事務讀取了另外乙個事務改寫但還未提交的資料,如果這些改變的資料在稍後回滾,那麼第乙個事務讀取的資料就是無效的。
不可重複讀:發生在乙個事務執行相同的查詢兩次或者兩次以上,但每次查詢的結果都不同,這是由於另乙個併發事務在兩次查詢之間更新了資料。
幻讀: 當乙個事務t1讀取幾行記錄後,另外乙個併發事務t2插入一些記錄,幻讀就發生了。在後來的查詢中,第乙個事務t1就會發現有一些原來沒有的額外的記錄
隔離級別
釋義isolation_default
使用後端資料庫預設的隔離級別
isolation_read_uncommited
允許讀取還未提交的改變了的資料,可能導致髒讀,不可重複讀,幻讀
==isolation_commited==
==允許在併發事務已經提交後讀取資料。可防止髒讀,但不可重複讀,幻讀也可能發生==
isolation_repeatable_read
對相同欄位的多次讀取的結果是乙隻的。除非資料被事務本身修改,可防止髒讀和不可重複讀,但幻讀也有可能發生
isolation_serializeable
完全服從acid的隔離級別。確保不發生髒讀,幻讀,不可重複讀。但是速度最慢
spring 可設定的事務屬性
id="transactionmanager"
class="orm***xx .orm包裡面的.hibernate3.0(4.0)hibernatetransactionmanager">
name="sessionfactory"
ref="sessionfactory">
property>
bean>
id="daoproxy"
class="transaction包下,interceptor包下的transactionproxyfactorybean">
name="target"
ref="原版dao物件">
property>
name="transactionmanager"
ref="transactionmanager(配置的事務管理器物件)">
property>
name="transactionattribute">
key="insert*">
propagation_required
prop>
key="update*">propagation_required,這裡設定事務隔離級別prop>
key="*">propagation_required,readonly(唯讀提示,一般寫在查詢方法上,效能優化)prop>
props>
property>
bean>
spring hibernate引起的延遲載入
在hibernate中,延遲載入是1個非常大的優點,但有時候卻給我們帶來一些小麻煩,在後台查詢結束 後,session已經關閉,但在前台顯示的時候,如果存在關聯關係就會產生延遲載入異常。解決辦法是客戶端每次請求就分配1個session,將請求結果返回給客戶端,並完成展現後關閉session 實現這個...
Spring Hibernate整合注意事項
1 spring jar包 需要額外加入 commons pool 和commons dbcp 若包含 spring 自帶的測試,還需要引入 spring test 2 spring beans.xml 如果使用了 spring annotation 則需要加入以下兩項配置 前提是已經匯入了bean...
spring hibernate事務的配置
最近要用到spring hibernate來開發。下面來說一下這兩都組合後的事務管理問題。首先我們來明白什麼是事務,簡單的說就是一次對資料庫的操作。事務它有四個特性 原子性,永續性,隔離性和一致性。原子性是指 對資料庫的一次原子操作,要麼從裡寫資料,要麼刪除資料。隔離性是指 由併發事務所作的修改必須...