演算法基礎⑦搜尋與圖論--BFS(寬度優先搜尋)
引言
原文:https://blog.csdn.net/u014745069/article/details/80788127
在mybatis的基礎知識中我們已經可以對mybatis的工作方式窺斑見豹(參考:《MyBatis————基礎知識》)。
本片部落格針對Mybatis內部工作原理進行闡述。
一、Mybatis工作原理圖
mybatis 原理圖如下所示:
二、工作原理解析
mybatis應用程式通過SqlSessionFactoryBuilder從mybatis-config.xml配置檔案(也可以用Java檔案配置的方式,需要新增@Configuration)來構建SqlSessionFactory(SqlSessionFactory是執行緒安全的);
然後,SqlSessionFactory的例項直接開啟一個SqlSession,再通過SqlSession例項獲得Mapper物件並執行Mapper對映的SQL語句,完成對資料庫的CRUD和事務提交,之後關閉SqlSession。
說明:SqlSession是單執行緒物件,因為它是非執行緒安全的,是持久化操作的獨享物件,類似jdbc中的Connection,底層就封裝了jdbc連線。
詳細流程如下:
1、載入mybatis全域性配置檔案(資料來源、mapper對映檔案等),解析配置檔案,MyBatis基於XML配置檔案生成Configuration,和一個個MappedStatement(包括了引數對映配置、動態SQL語句、結果對映配置),其對應著<select | update | delete | insert>標籤項。
2、SqlSessionFactoryBuilder通過Configuration物件生成SqlSessionFactory,用來開啟SqlSession。
3、SqlSession物件完成和資料庫的互動:
a、使用者程式呼叫mybatis介面層api(即Mapper介面中的方法)
b、SqlSession通過呼叫api的Statement ID找到對應的MappedStatement物件
c、通過Executor(負責動態SQL的生成和查詢快取的維護)將MappedStatement物件進行解析,sql引數轉化、動態sql拼接,生成jdbc Statement物件
d、JDBC執行sql。
e、藉助MappedStatement中的結果對映關係,將返回結果轉化成HashMap、JavaBean等儲存結構並返回。
mybatis層次圖:
原圖:https://blog.csdn.net/xudan1010/article/details/53435018
參考文章: