MyBatis原始碼閱讀 解析MyBatis執行流程

2021-09-10 18:44:53 字數 1107 閱讀 4596

前言

從demo分析上層流程

sqlsessionfactory

sqlsessionfactory 一旦被建立就應該在應用的執行期間一直存在,沒有任何理由對它進行清除或重建。使用 sqlsessionfactory 的最佳實踐是在應用執行期間不要重複建立多次,多次重建 sqlsessionfactory 被視為一種**「壞味道(bad smell)」。因此 sqlsessionfactory 的最佳作用域是應用作用域。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。

sqlsession

每個執行緒都應該有它自己的 sqlsession 例項。sqlsession 的例項不是執行緒安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。絕對不能將 sqlsession 例項的引用放在乙個類的靜態域,甚至乙個類的例項變數也不行。也絕不能將 sqlsession 例項的引用放在任何型別的管理作用域中,比如 servlet 架構中的 httpsession。如果你現在正在使用一種 web 框架,要考慮 sqlsession 放在乙個和 http 請求物件相似的作用域中。換句話說,每次收到的 http 請求,就可以開啟乙個 sqlsession,返回乙個響應,就關閉它。這個關閉操作是很重要的,你應該把這個關閉操作放到 finally 塊中以確保每次都能執行關閉。下面的示例就是乙個確保 sqlsession 關閉的標準模式:

從作用域和生命週期的分析,我們可以分析出,它的核心是sqlsession。

檢視org.apache.ibatis.session.defaults.defaultsqlsessionfactory原始碼,檢視sqlsession的獲取實現過程

private sqlsession opensessionfromdatasource(executortype exectype, transactionisolationlevel level, boolean autocommit) catch (exception e) finally

}

executor是mybatis執行器,是mybatis 排程的核心,負責sql語句的生成和查詢快取的維護;

接下來就是類似傳統jdbc的操作了

這裡寫描述

mybatis原始碼解析

最近閱讀了許久的mybatis原始碼,小有所悟。同時也發現網上有許多優秀的mybatis原始碼講解博文。本人打算把自己閱讀過的 覺得不錯的一些博文列出來。以此進一步加深對mybatis框架的理解。其實還有乙個目的是,本人也想寫一系列博文來分享自己對mybatis的理解。然而。個人文筆太差,列出的這些...

mybatis原始碼解析

類列表 sqlsessionfactory 說明 sqlsession物件的工場用於建立sqlsession。sqlsession 說明 執行sql的介面類。configuration 說明 資料庫連線和sql語句配置類。executor 說明資料操作方法介面類 步驟 載入xml檔案到xmlconf...

Mybatis原始碼解析

mybatis原始碼解析 一 mybatis 流程三個階段 1 初始化階段 讀取xml 配置檔案和註解中的配置資訊,建立配置物件,並完成各個模組的初始工作 3 資料處理階段 通過 sqlsession 完成sql解析,引數的對映 sql的執行 結果的反射解析過程 二 簡化版 mybatis 實現思路...