mybatis執行流程


 

 

 

MyBatis執行八步走

上面流程就是MyBatis內部核心流程,咱們來一步步解釋下,根據圖中步驟,我們可以將這個執行流程分成了8個步驟。

1、讀取MyBatis的核心配置文件。

mybatis-config.xml為MyBatis的全局配置文件,用於配置數據庫連接、屬性、類型別名、類型處理器、插件、環境配置、映射器(mapper.xml)等信息,這個過程中有一個比較重要的部分就是映射文件其實是配在這里的;這個核心配置文件最終會被封裝成一個Configuration對象

2、加載映射文件。

映射文件即SQL映射文件,該文件中配置了操作數據庫的SQL語句,映射文件是在mybatis-config.xml中加載;可以加載多個映射文件。常見的配置的方式有兩種,一種是package掃描包,一種是mapper找到配置文件的位置。

<!-- 使用包路徑,掃描包下所有的接口,這種方式比較方便 --> 

<package name="com.mybatis.demo"/> 
<!-- resource:使用相對路徑的資源引用-->
<!-- url:使用絕對類路徑的資源引用-->
<!-- class:使用映射器接口實現類的完全限定類名-->
<mapper resource="xxx.xml"/>

3、構造會話工廠獲取SqlSessionFactory。

這個過程其實是用建造者設計模式使用SqlSessionFactoryBuilder對象構建的,SqlSessionFactory的最佳作用域是應用作用域。

//2. 創建SqlSessionFactory對象實際創建的是DefaultSqlSessionFactory對象
SqlSessionFactory builder = new    SqlSessionFactoryBuilder().build(inputStream);

4、創建會話對象SqlSession。

由會話工廠創建SqlSession對象,對象中包含了執行SQL語句的所有方法,每個線程都應該有它自己的 SqlSession 實例。SqlSession的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。

//3. 創建SqlSession對象實際創建的是DefaultSqlSession對象
  SqlSession sqlSession = builder.openSession();

5、Executor執行器。

是MyBatis的核心,負責SQL語句的生成和查詢緩存的維護,它將根據SqlSession傳遞的參數動態地生成需要執行的SQL語句,同時負責查詢緩存的維護

  • SimpleExecutor -- SIMPLE 就是普通的執行器。
  • ReuseExecutor-執行器會重用預處理語句(PreparedStatements)
  • BatchExecutor --它是批處理執行器

 

6、MappedStatement對象。

MappedStatement是對解析的SQL的語句封裝,一個MappedStatement代表了一個sql語句標簽,如下:

<!--一個動態sql標簽就是一個`MappedStatement`對象-->
<select    id="selectUserList"    resultType="com.mybatis.User"> 
  select * from t_user
</select>

7、輸入參數映射。

輸入參數類型可以是基本數據類型,也可以是Map、List、POJO類型復雜數據類型,這個過程類似於JDBC的預編譯處理參數的過程,有兩個屬性 parameterType和parameterMap

8、封裝結果集。

可以封裝成多種類型可以是基本數據類型,也可以是Map、List、POJO類型復雜數據類型。封裝結果集的過程就和JDBC封裝結果集是一樣的。也有兩個常用的屬性resultType和resultMap。

 

 

 

 

 

 

參考:https://zhuanlan.zhihu.com/p/150008843

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM