mybatis快取機制

2021-07-09 09:08:27 字數 1129 閱讀 1457

mybatis和hibernate一樣,也提供了一二級快取。若存在一二級快取,則資料不會去資料庫互動,而是去記憶體中獲取。

一級快取是sqlsession級別的快取。在運算元據庫時需要構造sqlsession物件,在物件中有乙個資料結構(一般來說是hashmap)來儲存快取資料。

不同的sqlsession之間的快取區域是不影響的。

如下圖:

第乙個使用者查詢時,如果開啟了快取,則sqlsession會將第乙個使用者查詢的資料放到快取中。以後如果有人進行修改、新增或者刪除時,快取會將已有資料清空(避免髒資料),然後重新放入。其他人查詢時會優先從快取中取。

一級快取應用:

sqlsession可以理解為mybatis為每乙個使用者的每一組操作(乙個service方法內多次呼叫資料庫)生成的乙個sql會話。

事務控制在service層,sqlsession在事務關閉時清空。如果乙個service同時呼叫多次某個方法,則第一次以後會從sqlsession裡面獲取。

一級快取只限於同乙個sqlsession內,如果兩次呼叫同乙個service相同的方法查詢,則不會使用一級快取。

如下圖:

二級快取應用:

二級快取比一級快取的作用區域大。

在mysql-config.xml中開啟二級快取:

<?xml version="1.0" encoding= "utf-8" ?>   

select *

from product_category t

where

t.category_level = 1

MyBatis 快取機制

mybatis 提供了查詢快取來獲取資料,以提高查詢的效能。mybatis 的快取分為一級快取和二級快取。1 一級快取一級快取是 sqlsession 級別的快取,是基於 hashmap 的本地快取。不同的 sqlsession 之間的快取資料區域互不影響。當同乙個 sqlsession 執行兩次相...

Mybatis 快取機制

查詢快取主要是為了提高查詢訪問速度,即當使用者執行一次查詢後,會將該資料結果放到快取中,當下次再執行此查詢時就不會訪問資料庫了而是直接從快取中獲取該資料。如果在快取中找到了資料那叫做命中。同一sqlsession 多次查詢同一sql時會使用快取 test public void testlocalc...

mybatis快取機制

一 一級快取 本地快取預設開啟 sqlsession級別的快取。一級快取是一直開啟的,無法關閉。sqlsession級別的乙個map 與資料庫同義詞會話期間查詢到的資料會放到本地快取中。以後如果需要獲取相同的資料,直接從快取中拿,沒有必要再去查詢資料庫。1.一級快取失效情況 沒有使用到當前一級快取的...