Spring Hibernate整合 學習筆記

2021-09-30 12:35:32 字數 3189 閱讀 3517

外部配置檔案的好處,動態獲取本機配置:方便由於機器不同導致的配置不同,否則每次覆蓋還要重新修訂 配置資訊;

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來開發。下面來說一下這兩都組合後的事務管理問題。首先我們來明白什麼是事務,簡單的說就是一次對資料庫的操作。事務它有四個特性 原子性,永續性,隔離性和一致性。原子性是指 對資料庫的一次原子操作,要麼從裡寫資料,要麼刪除資料。隔離性是指 由併發事務所作的修改必須...