Mybatis 一級快取和二級快取

2021-08-16 20:09:45 字數 2421 閱讀 2430

一級快取是sqlsession級別的快取

工作機制:乙個sqlsession就代表和資料庫的一次會話,在資料庫中查出的資料放在一級快取中,同乙個物件再次查詢時,會去快取中查詢,避免了再次查詢資料庫。

使用:mybatis預設開啟,不需要手動設定

舉例:同乙個物件,查詢兩次,只呼叫一次sql

注:所有測試方法呼叫的getsqlsesssionfactory方法是我單抽出來的

缺陷:2.使一級快取失效的情況

①sqlsession不同

@test

public void testfirstlevelcache() throws ioexception finally

}

建立2個sqlsession,查詢了2次資料庫

②sqlsession相同,查詢條件不同

@test

public void testfirstlevelcache() throws ioexception finally

}

同查id,條件不同,查詢2次sql語句

③sqlsession相同,兩次查詢之間執行了增刪改(這次增刪改可能對當前資料有影響)

④sqlsession相同,手動清除了一級快取

@test

public void testfirstlevelcache() throws ioexception finally

}

快取清空後,同乙個sqlsession,同一條件查詢時又查了一遍sql語句,而且emp01和emp02並不是同乙個物件

一級快取侷限性:

當一次會話結束後,再次查詢同樣的資訊時還要從資料庫裡取,但是像部門資訊這種經常不會修改的資訊,我們希望查詢過一次後就放在快取裡,顯然,一級快取是做不到的。

二級快取(全域性快取):基於namespace級別的快取(乙個namespace對應乙個二級快取)

工作機制:

1、乙個會話,查詢一條資料,這個資料就會被放在當前會話的一級快取中;

2、如果會話關閉;一級快取中的資料會被儲存到二級快取中;新的會話查詢資訊,就可以參照二級快取中的內容;

3、不同namespace查出的資料會放在自己對應的快取中(map)

效果:資料會從二級快取中獲取

查出的資料都會被預設先放在一級快取中。

只有會話提交或者關閉以後,一級快取中的資料才會轉移到二級快取中

使用:1)、開啟全域性二級快取配置:

3)、我們的pojo需要實現序列化介面

測試方法

@test

public void testsecondlevelcache() throws ioexceptionfinally

}

控制台資訊:

cache hit ratio快取命中率,0.0的意思是第一次查快取沒有命中

0.5的意思是第二次查快取有一次命中

關閉二級快取 Mybatis一級快取 二級快取詳講

首先,我們先看一下這個標題 查詢快取 那就說明跟增 刪 改是沒有任何關聯的,只有在查詢時,才會遇到快取,增刪改不涉及!查詢快取目前mybatis中提供了兩個,分別是 一級快取 二級快取 所以,sqlsession的快取,是屬於一級快取 那,又有什麼用呢?比如,我們現在資料庫中有兩條資料,分別是張三跟...

mybatis查詢快取之一級快取和二級快取詳細解析

一級快取是mybatis預設就幫我們開啟的,我們不需要多做配置,但是我們得知道其中原理,否則我們也不知道怎麼使用,也不知道我們到底有沒有一級快取。上面第二部分說過一級快取的作用域是同乙個sqlsession,sqlsession的作用就是建立和資料庫的會話,我們對資料庫表的增刪改查都是通過sqlse...

mybatis 快取(一級和二級快取)

1.快取 好處 快取的使用演示 1 sql語句或查詢條件不同 2 分屬不同sqlsession物件 3 查詢前執行clearcache 4 提交事務 2.一級快取 3.二級快取 跟 web應用中 物件作用範圍類似。cacheenabled value true flushinterval 快取重新整...