MyBatis的工作流程
首先在MyBatis啟動的時候我們需要去解析配置文件,包括全局配置文件(Mybatis-config.xml)以及映射器配置文件, 這里面包含了我們怎么控制MyBatis的行為和我們要對數據庫下達的指令,也就是我們的SQL的信息晕讲,我們會把這些信息解析成一個Configuration對象子巾。
接下來就是我們操作數據庫的接口锰什,它在應用程序和數據庫中間罚随,代表我們和數據庫之間的一次連接玉工,這個就是SqlSession對象。
我們要獲得一個會話淘菩,必須有一個會話工廠SqlSessionFactory遵班,SqlSessionFactory中又必須包含我們所有的配置信息,所以MyBatis通過一個builder來創(chuàng)建SqlSessionFactory潮改。
我們知道MyBatis是對JDBC的封裝狭郑,也就意味著底層一定會出現JDBC的一些核心對象,比如執(zhí)行SQL的Statement汇在,結果集ResultSet翰萨。在MyBatis里面,SqlSession只是提供給應用的一個接口糕殉,還不是SQL的真正執(zhí)行對象亩鬼。
通過代碼中可以看到,SqlSession中持有一個Executor對象阿蝶,用來封裝對數據庫的操作雳锋。在執(zhí)行器Executor執(zhí)行query或者update操作的時候,我們會創(chuàng)建一系列的對象來處理參數羡洁,執(zhí)行SQL玷过,處理結果集。我們可以簡化成一個StatementHandler對象筑煮,下面是MyBatis的主要流程圖:
在MyBatis的主要工作流程里面辛蚊,不同的功能是由很多不同的類協(xié)作完成的,它們分布在MyBatis Jar的不同的packagel里面真仲。
和Spring一樣袋马,MyBatis按照功能職責的不同,所有的package可以分成不同的工作層次:
接口層: 接口層是我們打交道最多的袒餐,核心對象是SqlSession飞蛹,它是上層應用和MyBatis打交道的橋梁谤狡,SqlSession上定義了很多對數據庫操作的方法,接口層在接收到調用請求的時候卧檐,會調用核心處理層的相應模塊來完成具體的數據庫操作墓懂。
核心處理層: 跟數據庫操作相關的動作都是在這一層完成的。核心處理層主要做了下面幾件事:
- 把接口中傳入的參數解析并映射成JDBC類型
- 解析xml文件中的SQL語句霉囚,包括插入參數和動態(tài)SQL的生成
- 執(zhí)行SQL語句
- 處理結果集捕仔,并映射成Java對象
插件也屬于核心處理層,這是由它的工作方式和攔截的對象決定的盈罐。
基礎支持層:主要是由一些抽取出來的通用功能榜跌,用來支持核心處理層的功能。b比如數據源盅粪、緩存钓葫、日志等這些功能。