Mytais的工作原理與快取

2021-09-29 04:15:21 字數 1866 閱讀 8301

mybatis-config.xml轉成inputstream流物件;

根據inputstream流物件解析出configuration物件,然後建立sqlsessionfactory工廠物件;

然後呼叫sqlsessionfactory中的opensession建立sqlsession物件;

sqlsession中呼叫executor執行資料庫操作並生成具體sql指令;

提交事務;

關閉sqlsession

mybatis的一級快取是sqlsession級別的快取,在運算元據庫時需要構造sqlsession物件,在物件中有乙個hashmap用於儲存快取資料,不同的sqlsession之間快取資料區域(hashmap)是互相不影響的。

一級快取的作用域是sqlsession範圍的,當在同乙個sqlsession中執行兩次相同的sql語句時,第一次執行完畢會將資料庫中查詢的資料寫到快取(記憶體)中,第二次查詢時會從快取中獲取資料,不再去底層進行資料庫查詢,從而提高了查詢效率。需要注意的是:如果sqlsession執行了dml操作(insert、update、delete),並執行commit()操作,mybatis則會清空sqlsession中的一級快取,這樣做的目的是為了保證快取資料中儲存的是最新的資訊,避免出現髒讀現象。

當乙個sqlsession結束後該sqlsession中的一級快取也就不存在了,mybatis預設開啟一級快取,不需要進行任何配置。

注意:mybatis的快取機制是基於id進行快取,也就是說mybatis在使用hashmap快取資料時,是使用物件的id作為key,而物件作為value儲存

mybatis預設沒有開啟二級快取,需要在setting全域性引數中配置開啟二級快取。

在mybatis-config.xml中配置:

>

name

="cacheenabled"

value

="true"

/>

settings

>

注意:cacheenabled的value為true表示在此配置檔案下開啟二級快取,該屬性預設為false。

#{}和${}的區別是什麼?

#{}是預編譯處理,${}是字串替換。

mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫preparedstatement的set方法來賦值;

mybatis在處理時,就

是把

{}時,就是把

時,就是

把{}替換成變數的值。

使用#{}可以有效的防止sql注入,提高系統安全性

mybatis半自動orm對映工具與全自動的區別?

答:mybatis在 查詢關聯物件或關聯集合物件時,需要手動編寫sql來完成,所以,稱之為半自動orm對映工具。hibernate屬於全自動orm對映工具,使用hibernate查詢關聯物件或者關聯集合物件時,可以根據物件關係模型直接獲取。

快取的工作原理

1.快取的工作流程 快取主要針對select查村語句作用的 1 第一次查詢將資料寫入快取 2 第二次查詢時,先看快取中是否有,有,提取。3 期間針對此快取的任何insert update delet操作,都觸發將快取清空。以mybatis的二級快取為例,快取流程都一樣,不論一級快取,還是二級快取,抑...

CPU快取的工作原理

當cpu要讀取乙個資料時,首先會從快取 cache 中查詢,如果找到就立即讀取並送給cpu處理 如果沒有找到,就用相對慢的速度從記憶體中讀取並送給cpu處理,同時把這個資料所在的資料塊調入快取中,可以使得以後對整塊資料的讀取都從快取中進行,不必再呼叫記憶體。通過優化的的讀取機制,可以使cpu讀取快取...

Web快取工作原理

現代的商業化 快取相當的複雜。這些快取構建的非常高效,可以支援http和其他一些技術的各種高階特性。但除了一些微妙的細節之外,web快取的基本工作原理大多很簡單。對一條http get報文的基本快取處理過程包括7個步驟 接收 快取從網路中讀取抵達的請求報文 解析 快取對報文進行解析,提取url和各種...