002649:springboot下mybatis運行原理


一、mybatis主要成員

  1、Configuration:
    a、 MyBatis所有的配置信息都保存在Configuration對象之中,配置文件中的大部分配置都會存儲到該類中
    b、可以理解為所有mybatis文件的集合
  2、SqlSession:
    a、作為MyBatis工作的主要頂層API,表示和數據庫交互時的會話,完成必要數據庫增刪改查功能
    b、從中獲取會話的連接
   3、Executor:
               a、MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護
    b、sql的執行器
   4、StatementHandler:
    a、封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數等
   5、ParameterHandler:
    a、負責對用戶傳遞的參數轉換成JDBC Statement 所對應的數據類型
    b、主要負責類型的轉換
    c、這個用戶可以自己定制
  6、ResultSetHandler:
    a、負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合
   7、TypeHandler
    a、負責java數據類型和jdbc數據類型(也可以說是數據表列類型)之間的映射和轉換
  8、 MappedStatement
    a、MappedStatement維護一條<select|update|delete|insert>節點的封裝
    b、mapper文件中的一個id對應一個該對象
  9、 SqlSource
    a、負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,並返回
   10、BoundSql
    a、表示動態生成的SQL語句以及相應的參數信息
  11、關系
     a、根據配置文件(全局的和sql映射文件)初始化Configuration對象
     b、Configuration初始化一個DefautSqlSessionFactory作為會話工廠
     c、Configuration創建sqlSession(內部包含configuration)
     d、Configuration中聲明數據庫的具體執行類,MapperProxy中通過反射調用執行類的具體方法。
     e、Executor的具體方法在執行前會構造MappedStatement做入參,然后從MappedStatement中抽離出BoundSql
     f、SqlSource根據入參構造BoundSql
     g、查詢前StatementHandler將mappedstatement中的內容填充到BoundSql中。
     h、緊接着g,StatementHandler的parameterize方法會調用ParameterHandler並在其setParameters中使用TypeHandler對BoundSql中的占位符進行替換。
     i、ResultSetHandler和ParameterHandler一起聲明,會對Statement返回結果進行處理
   12、其他
    a、Configuration中在構造parameterHandler,executor,ResultSetHandler等地方都有攔截器處理邏輯
    
    

 

二、關鍵流程
   1、構造一個會話工廠
  

    a、最后穿創建的應該是DefaultSqlSessionFactory,不是DefaultSqlSession

    b、入口一般是spring等啟動時調用,如spring中的MybatisAutoConfiguration類

  2、openSesion獲取SqlSession對象

  

    a、openSession中創建了事務,會話和執行類     
    b、SqlSession的實現類DefaultSqlSession便是具體的數據庫操作類(可以增刪改查),它的內部依賴configuration     
    c、數據源構造了事務,事務成全了數據庫操作執行器executor
    d、事務隔離級別裝載
    e、executor構造時的type的來源

  3、getMapper獲取到接口的代理對象

  

     a、MapperFactoryBean的getObject()方法會調用上述流程

     b、session中的configuration中獲取mapper

三、請求執行

  1、流程圖

    

  a、mapperproxy通過jdk的代理反射構成,其中會調用executor的實現類

四、總流程圖

  1、流程圖

  

   

 

 

mybatis加載配置文件及應用原理解析

參見:

  1、https://www.cnblogs.com/luoxn28/p/6417892.html
  2、https://blog.csdn.net/qq_30604989/article/details/80425288


免責聲明!

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



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