java動態代理---MyBatis之SqlSessionDaoSupport

在使用mybatis時我們一般通過繼承SqlSessionDaoSupport然后使用getSqlSession獲取數據庫連接,進行數據庫相關操作。我們查看getSqlSession方法可以看出,這個方法其實是返回了一個SqlSessionTemplate對象。

接著我們進入SqlSessionTemplate的構造器中看看,最終發現最終調用的都是如下構造器。

根據代碼我們可以看到,最終生成的是一個sqlSession的動態代理sqlSessionProxy。根據動態代理構造我們可以很容易的看出,最終數據庫相關操作都封裝在SqlSessionInterceptor的invoke方法中。我們進invoke方法中看看。

在invoke方法中我們可以看到,改代理類并無對原有方法做過多包裝。只是封裝了相關事物操作。具體執行順序如下:

1. 獲取數據庫鏈接,處理相關sql操作

2. 如果數據庫操作有相應事物,則提交事物

3. 若2發生異常則回滾數據庫操作,并關閉連接

4. 第四步一定執行,如果數據庫鏈接沒有關閉,則關閉數據庫鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,366評論 11 349
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,335評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,941評論 18 139
  • 昨天晚上,在“夢想之約”的微群里聽了企鵝媽媽的分享,受益匪淺。 分享會是由Rita組織的。Rita是我學習寫作的導...
    晨曦愛讀書閱讀 569評論 0 1
  • 1、整體分析。 1、1 構建交易系統,月計劃總體完成60%。 執行奶爸,虧損≤10%:歡樂ETF/全志已經執行中,...
    crb8閱讀 195評論 0 0