Mybatis實戰(三)生命週期分析

2021-06-21 05:26:12 字數 901 閱讀 4929

本文將重點討論mybatis中幾個重要物件的範圍和生命週期。不正確的使用它們會導 致嚴重的併發問題。

這個類可以被例項化,使用和丟棄。一旦你建立了 sqlsessionfactory 後,這個類就不需 要存在了。 因此 sqlsessionfactorybuilder 例項的最佳範圍是方法範圍 (也就是本地方法變數)。 你可以重用 sqlsessionfactorybuilder 來建立多個 sqlsessionfactory 例項, 但是最好的方式是 不需要保持它一直存在。

一旦被建立,sqlsessionfactory 應該在你的應用執行期間都存在。沒有理由來處理或重新建立它。 使用 sqlsessionfactory 的最佳實踐是在應用執行期間不要重複建立多次。 這樣的操作將被視為是非常糟糕的。 因此 sqlsessionfactory 的最佳範圍是應用範圍。 有很多方法可以做到, 最簡單的就是使用單例模式或者靜態單例模式。

每個執行緒都應該有它自己的 sqlsession 例項。sqlsession 的例項不能被共享,也是執行緒 不安全的。因此最佳的範圍是請求或方法範圍。絕對不能將 sqlsession 例項的引用放在乙個 類的靜態字段甚至是例項欄位中。 也絕不能將 sqlsession 例項的引用放在任何型別的管理範 圍中, 比如 serlvet 架構中的 httpsession。 如果你現在正用任意的 web 框架, 要考慮 sqlsession 放在乙個和 http request物件相似的範圍內。換句話說,基於收到的 http 請求,你可以開啟 了乙個 sqlsession,然後返回響應,就可以關閉它了。關閉 session 很重要,你應該確保使 用 finally 塊來關閉它。

備註: 依賴注入框架可以建立執行緒安全、事務sqlsessions對映器和直接注入你的bean,這樣你就可以忘記他們的生命週期。筆者將在後期講解mybaits整合spring

有用的自己收!

Autofac 之三 生命週期

1 instanceperdependency 對每乙個依賴或每一次呼叫建立乙個新的唯一的例項。這也是預設的建立例項的方式。2 instanceperlifetimescope 在乙個生命週期域中,每乙個依賴或呼叫建立乙個單一的共享的例項,且每乙個不同的生命週期域,例項是唯一的,不共享的。3 ins...

Angular學習 三 生命週期鉤子

angular提供了生命週期鉤子,把這些關鍵生命時刻暴露出來,賦予我們在它們發生時採取行動的能力。可以將鉤子函式理解為在合適的時候做合適的事情。官方給出的解釋是 每個元件都有乙個被 angular 管理的生命週期。angular 建立它,渲染它,建立並渲染它的子元件,在它被繫結的屬性發生變化時檢查它...

Svelte 迷途求索(三) 生命週期

每個元件都有從建立到銷毀的過程,這個過程被稱為生命週期 生命週期可以解決一些業務上的需求,比如元件載入時請求資料 元件銷毀時清除定時器 svelte 提供了五個生命週期函式 元件載入 onmount 更新前 beforeupdate 更新後 afterupdate 元件銷毀 ondestroy ti...