將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和各種...