快取儲存在記憶體中,讀取速度快
儲存在sqlsession中,預設開啟,底層是乙個hashmap(cachekey鍵(statsmentid+params+boundsql+rowbounds),
值(具體物件))。第一次查詢先去快取中查詢,找到直接返回,沒找到去資料庫獲取,返回查詢結果並快取。事務提交操作會清空快取。
一級快取原始碼理解:根據父子關係翻閱原始碼,比如sqlsession(clearcache)->
defaultsqlsession(clearcache)->
excutor(clearlocalcache)->
baseexcutor(clearlocalcache)->
perpetualcache(clear)檢視最底層,他定義的就是乙個hashmap,得出結果快取就是存放map物件。方法執行底層都要呼叫createcachekey獲取cachekey,在方法內通過configuration.getenvironment是否為空來決定是否完成cachekey值的封裝。根據key是否為空來判定快取的新增。
橫跨sqlsesion,預設關閉,通過註解標籤@cachenamespace開啟二級快取,多個sqlsession共享二級快取,二級快取的不是物件,是快取的資料,注意二級快取實體類要實現序列化介面,因為二級快取儲存記憶體和硬碟中。還可以引入外部redis非關係性資料庫來進行二級快取,自定義快取類必須要實現cache包下的cache介面。
關閉二級快取 Mybatis一級快取 二級快取詳講
首先,我們先看一下這個標題 查詢快取 那就說明跟增 刪 改是沒有任何關聯的,只有在查詢時,才會遇到快取,增刪改不涉及!查詢快取目前mybatis中提供了兩個,分別是 一級快取 二級快取 所以,sqlsession的快取,是屬於一級快取 那,又有什麼用呢?比如,我們現在資料庫中有兩條資料,分別是張三跟...
mybatis查詢快取之一級快取和二級快取詳細解析
一級快取是mybatis預設就幫我們開啟的,我們不需要多做配置,但是我們得知道其中原理,否則我們也不知道怎麼使用,也不知道我們到底有沒有一級快取。上面第二部分說過一級快取的作用域是同乙個sqlsession,sqlsession的作用就是建立和資料庫的會話,我們對資料庫表的增刪改查都是通過sqlse...
mybatis一級快取 二級快取
一級快取基於sqlsession,是預設開啟的,在運算元據庫時需要構造sqlsession物件,在物件中有乙個hashmap用於儲存快取資料。不同的sqlsession之間快取資料區域是互相不影響的。一級快取的作用域是sqlsession範圍的,當在同乙個sqlsession中執行兩次相同的sql語...