1. 程式人生 > 其它 >演算法基礎⑦搜尋與圖論--BFS(寬度優先搜尋)

演算法基礎⑦搜尋與圖論--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

參考文章:

Mybatis實現原理深入解析

Mybatis之工作原理

mybatis載入順序