當前位置:
首頁 > 知識 > 框架學習系列 mybatis第二篇 mybatis的工作原理

框架學習系列 mybatis第二篇 mybatis的工作原理

本節主要內容

1:mybatis的原理介紹

2:總結&下節預告

本文是《凱哥陪你學系列-框架學習之mybatis框架學習》中第二篇 mybatis的工作原理

聲明:本文系凱哥原創。轉載請註明出處

一:mybatis的原理介紹

mybatis 框架整體的話,先上一張圖吧。然後通過這張圖對於mybatis的框架原理進行一下展開。

流程說明:

1:載入配置並初始化

通過讀取mybatis全局配置文件(mybatisConfig.xml 可以不是這個名字。)從中獲取需要的參數。比如:數據源、事物、映射文件(也就是mapper文件。執行statement的相關信息,包括執行sql語句、輸入參數、輸出結果)等信息後載入到內存中。

其中來源有多種方式:通過配置文件或者是通過主角方式獲取

在項目中如下圖:

2:由sqlSessionFactory(會話工程)根據獲取到的資料庫連接信息創建出訪問資料庫所需要的sqlSession會話對象。

3:通過sqlSession會話對象,程序開發者可以進行CRUD(增刪改查)操作。

該介面有一個默認的實現:DefaultSqlSeesion.

4:有獲取到的sqlsession對象調用executor介面進行對資料庫正在的操作。

需要注意的是:sqlsession對象是不能夠直接操作資料庫的。

executor(執行器)有兩個實現:基本執行器和緩存執行器。其中緩存執行器是默認的

5:執行器會根據配置和sqlsession對象中的信息查找到對應的毛片兒Statement(就是對應的mapper.xml)執行相應的語句。

mappedStatemen會查找對應mapper.xml中對應id的sql執行語句。會根據輸入參數+sql語句執行資料庫操作後,返回對應的輸出結果。

其中,輸入參數的類型:

1:簡單類型

2:pojo對象

3:hashMap等

輸出結果類型:

1:簡單類型

2:pojo

3:hashmap

換言之:

我們知道,持久層的工作就是和資料庫打交道,將我們的數據從系統中存入資料庫,或者是將資料庫中的內容取出。這也是持久層框架乾的事情。在mybatis中,mapped statement(底層封裝對象)和Executor(執行器),對用戶是透明不可見的。也就是說,我們用戶不需要知道我們傳入的各種參數是如何被mapped statement 進行封裝成為一個可以被資料庫是別的sql語句的參數的。也不用知道Executor是如何在sqlSession內部通過一系列的執行去操作資料庫的。

我們需要做的是,創建一個sqlSession(鏈接資料庫的會話)的對象,通過這個sqlSession介面提供給程序員的一些方法,傳入相應的映射文件(這個文件包含有我們要執行的sql語句)及對應的參數。然後在mybatis內部,將傳入的映射文件的內容和傳入參數進行解析,然後通過執行器去發送sql語句。再將得到的結果通過底層封裝對象進行封裝。返回給sqlSession方法的調用方。

這裡需要注意一個地方:sqlSession默認情況下是不會自動提交事務的,所以,在我們跟資料庫鏈接的時候,如果需要提交事務,需要手動的進行提交。而且我們在手動提交sql語句的時候,是需要和資料庫建立連接的。那麼問題來了,我們的sqlSession這個會話是怎麼來的呢?它又是在什麼時候和資料庫建立了鏈接呢?

在我們的mybatis中,有一個會話工廠,它是一個全局只需要一個的工廠。它的作用就是創建sqlsession。和資料庫鏈接的數據源對象就是通過sqlSessionFactory這個工廠進行的創建時,賦值給了sqlSession這個會話對象的。所以一般sqlSessionFactory一般都是配置為單例的。而我們的整個mybatais的所有配置,並不是由sqlSessionFactory去進行讀取的,根據單一職責原則,在mybatis中,是由SqlSessionFactoryBuilder去進行讀取的,當然,它讀取的配置信息是有很多的,將mybatis的運行環境信息讀取完成之後,然後創建一個SqlSessionFactory。由於這些讀取環境不是mybatis的核心,我們的圖上就沒有體現。

那麼,這些配置文件寫在哪了呢?我們一般寫在SqlMapConfig.xml這個文件中。(是mybatis的全局配置文件,名稱不固定的)配置了數據源、事務等mybatis運行環境。

那麼,mybatis在運行的時候是怎麼執行的呢呢?

mybatis的執行流程

首先呢,我們配置mybatis的配置文件,sqlmapConfig.xml這個文件(雖然名稱不固定,但是這是約定成俗的寫法)。

然後,通過配置文件,載入mybatis的運行環境,創建SqlSessionFactory的會話工廠(按照單例方式創建,多例也可以,不過浪費資源嚴重)。

接下來,通過會話工廠(SqlSessionFactory)去創建會話(SqlSession)。這個介面是線程不安全的,所以建議應用在方法體內。

剩下的就是,調用sqlSession的方法去操作資料庫了。操作完成後,進行下事務的commit()的方法。然後釋放資源關閉sqlSession。

其中我們程序開發者關注的:

1:配置文件的配置等

2:根據自身業務在mapper.xml中編寫的對應CRUD執行的sql語句。

二:總結&下節預告

通過本文學習,我們需要知道mybatis具體的工作原理。這樣有利於我們更好的去學習mybatis

下節預告:現在我們了解了mybatis的工作原理,那麼接下來我們需要幹嘛呢?《mybatis入門程序之工程項目的搭建》


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 凱哥java 的精彩文章:

老爺子,您這活到老學到老,這讓年輕的我們情何以堪?
框架學習系列 mybatis 第一篇 原生jdbc連接分析
從零學java筆錄-第43篇第二階段封裝private關鍵字
從零學java筆錄-第42篇第二階段成員變數和局部變數的區別

TAG:凱哥java |

您可能感興趣

學界 | Wasserstein is all you need:構建無監督表示的統一框架
淺談Metasploit框架中的Payload
JFinal框架學習——EhCachePlugin
Wasserstein is all you need:構建無監督表示的統一框架
Karpathy更新深度學習開源框架排名:TensorFlow第一,PyTorch第二
python 框架flask學習心得
Python爬蟲框架之pyspider
基於Asyncio的Python微框架:Quart
深度學習框架排行榜:找工作學TensorFlow,PyTorch搜索量逼近Keras
類Keras的PyTorch 深度學習框架——PyToune
Spring Cache 框架
Keras vs PyTorch:誰是「第一」深度學習框架?
Jmeter+Ant+Jenkins介面自動化測試框架搭建for Windows
mybatis框架的動態sql語句
Python Web 應用程序 Tornado 框架簡介
SpringMVC + security模塊 框架整合詳解
AI 框架使用排行:TensorFlow、Scikit Learn、IBM Watson、Spark-MLib、Keras
筆記應用GoodNotes將推出macOS版本,基於Project Catalyst框架
第55期:Python機器學習實踐指南、Tensorflow 實戰Google深度學習框架
python:web框架Falsk知識點總結