1. 程式人生 > >【mybits】一級快取和二級快取

【mybits】一級快取和二級快取

    mybatis的一級快取和二級快取最大的區別是作用範圍不同,如下圖,一級快取是SqlSession級別的快取,不同的SqlSession之間的快取資料區域是互相不受影響的;二級快取是mapper級別的快取,多個SqlSession可以共用二級快取。


如果SqlSession只選commit(增刪改)操作,一級快取和二級快取都需清空快取區,保證快取中儲存的是最新的資料,避免髒讀。

一級快取

mybatis預設支援一級快取,因此不需要進行任何配置

@Test
	public void testCache1() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();// 建立代理物件
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

		// 第一次發起請求,查詢id為1的使用者
		User user1 = userMapper.findUserById(1);
		System.out.println(user1);

		// 如果sqlSession去執行commit操作(執行插入、更新、刪除),清空SqlSession中的一級快取,這樣做的目的為了讓快取中儲存的是最新的資訊,避免髒讀。

		// 更新user1的資訊
		user1.setUsername("測試使用者22");
		userMapper.updateUser(user1);
		//執行commit操作去清空快取
		sqlSession.commit();

		// 第二次發起請求,查詢id為1的使用者
		User user2 = userMapper.findUserById(1);
		System.out.println(user2);

		sqlSession.close();

	}


二級快取

二級快取與一級快取的區別:二級快取的範圍更大,多個sqlsession可以共享一個mapper的二級快取區域,mapper的二級快取區域按照mappernamespace分配的

mybatis的二級快取是mapper級別的,在sqlmapconfig.xml設定二級快取的總開關,還要在具體mapper.xml中開啟二級快取

<settings>
		<!-- 開啟二級快取 -->
		<setting name="cacheEnabled" value="true"/>
	</settings>

<!-- 開啟本mapper的namespace下的二快取 -->
<cache />

根據需求不需要弄二級快取的查詢,或每次查詢都需要最新資料的sql,可以禁用二級快取

<select id="findUserById" parameterType="int" resultType="user" useCache="false">

public void testCache2() throws Exception {
		SqlSession sqlSession1 = sqlSessionFactory.openSession();
		SqlSession sqlSession2 = sqlSessionFactory.openSession();
		SqlSession sqlSession3 = sqlSessionFactory.openSession();
		// 建立代理物件
		UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
		// 第一次發起請求,查詢id為1的使用者
		User user1 = userMapper1.findUserById(1);
		System.out.println(user1);
		
		//這裡執行關閉操作,將sqlsession中的資料寫到二級快取區域
		sqlSession1.close();
				
		//使用sqlSession3執行commit()操作
		UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
		User user  = userMapper3.findUserById(1);
		user.setUsername("張明明");
		userMapper3.updateUser(user);
		//執行提交,清空UserMapper下邊的二級快取
		sqlSession3.commit();
		sqlSession3.close();
				
		UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
		// 第二次發起請求,查詢id為1的使用者
		User user2 = userMapper2.findUserById(1);
		System.out.println(user2);

		sqlSession2.close();

	}


相關推薦

mybits一級快取二級快取

    mybatis的一級快取和二級快取最大的區別是作用範圍不同,如下圖,一級快取是SqlSession級別的快取,不同的SqlSession之間的快取資料區域是互相不受影響的;二級快取是mappe

MyBatis一級快取二級快取詳解

一級快取   Mybatis對快取提供支援,但是在沒有配置的預設情況下,它只開啟一級快取,一級快取只是相對於同一個SqlSession而言。所以在引數和SQL完全一樣的情況下,我們使用同一個SqlSession物件呼叫一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次

Hibernate總結--一級快取二級快取

在Hibernate中存在一級快取和二級快取,一級快取時Session 級別的快取,它是屬於事務範圍的快取,這一級別的快取由 hibernate 管理的。一級快取Hibernate預設會實現,當使用get或者load等方式查詢時會將結果存在Session中,在下一次查詢時。若是同一個Session,

mybatis 一級快取二級快取 配置使用

mybatis提供查詢快取,用於減輕資料壓力,提高資料庫效能。 mybaits提供一級快取,和二級快取。 1、一級快取 ​ MyBatis 預設開啟了一級快取,一級快取是在SqlSession 層面進行快取的。即,同一個SqlSession ,多次呼叫同一個Mapp

mybatis 第六篇 MyBatis一級快取二級快取

一、一級快取 1.什麼是一級快取 每當我們使用mybatis開啟一次資料庫會話,mybaits就會建立一個sqlSession物件。 在一次資料庫會話中,當我們執行完全相同的sql語句,為了解決資源浪費

Mybatis之一級快取二級快取

Mybatis的快取 Mybatis的快取,包括一級快取和二級快取 一級快取是預設使用的。 二級快取需要手動開啟。 一級快取 一級快取指的就是sqlsession,在sqlsession中有一個數據區域,是map結構,這個區域就是一級快取區域。一級快取中的key

Mybatis的一級快取二級快取詳解

注:本筆記是根據尚矽谷的MyBatis視訊記錄的 對於任何一個持久層框架,都有快取機制;快取在電腦中有一塊真實的儲存空間(https://baike.baidu.com/item/%E7%BC%93%E5%AD%98/100710?fr=aladdin); 兩個關於mybatis快取額外的連

Mybatis的一級快取二級快取執行順序

1、先判斷二級快取是否開啟,如果沒開啟,再判斷一級快取是否開啟,如果沒開啟,直接查資料庫 2、如果一級快取關閉,即使二級快取開啟也沒有資料,因為二級快取的資料從一級快取獲取 3、一般不會關閉一級快取 4、二級快取預設不開啟 5、如果二級快取關閉,直接判斷一級快取是否有資料,如果沒有就

Hibernate之一級快取二級快取

1:Hibernate的一級快取:   1.1:使用一級快取的目的是為了減少對資料庫的訪問次數,從而提升hibernate的執行效率;(當執行一次查詢操作的時候,執行第二次查詢操作,先檢查快取中是否有資料,如果有資料就不查詢資料庫,直接從快取中獲取資料);    1.

hibernate快取一級快取二級快取理解

一、什麼是快取:   快取是指為了降低應用程式對物理資料來源訪問的頻次從而提高應用程式的執行效能的一種策略。 二、為什麼使用快取: 1.ORM框架訪問資料庫的效率直接影響應用程式的執行速度,提升和優化ORM框架的執行效率至關重要。 2.Hibernate的快取是提升和

Mybatis一級快取二級快取理解

持久層框架:Mybatis Mybatis提供查詢快取分為一級快取和二級快取,用於減輕資料庫壓力,提高資料庫效能。 一級快取的工作原理 一級快取是SqlSession級別的快取   MyBatis的一級查詢快取是由 org.apache.ibatis.cache.

hibernate一級快取二級快取的區別

                       快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。   快取的介質一般是記

簡單訴說mybatis一級快取二級快取

Mybatis提供快取分別為一級快取和二級快取,用於減輕資料庫壓力,提高資料庫效能。 一級快取是SqlSession級別的快取;二級快取是mapper級別(namespace)的快取 一級快取作用域是sqlsession,生命週期是sqlsession,預設開啟,不能關閉

MyBatis一級快取二級快取

“花明月暗籠輕霧,今宵好向郎邊去” 前言 在實際專案開發中,通常對資料庫查詢的效能要求很高,而 Mybatis提供了查詢快取來快取資料,從而達到提高查詢效能的要求。 Mybatis的査詢快取分為一級快取和二級快取。一級快取是 SqlSession級別的快取,二級

Mybatis的一級快取二級快取的理解區別

一級快取基於sqlSession預設開啟,在操作資料庫時需要構造SqlSession物件,在物件中有一個HashMap用於儲存快取資料。不同的SqlSession之間的快取資料區域是互相不影響的。一級快取的作用域是SqlSession範圍的,當在同一個sqlSession中執

MyBatis (五)一級快取二級快取的區別

什麼叫快取將資料存放在程式記憶體中,用於減輕資料查詢的壓力,提升讀取資料的速度,提高效能。一級快取■ 兩個級別SqlSession級別的快取,實現在同一個會話中資料的共享Statement級別的快取,可以理解為快取只對當前執行的這一個Statement有效,執行完後就會清空快

MyBatis中的一級快取二級快取介紹

先說快取,合理使用快取是優化中最常見的,將從資料庫中查詢出來的資料放入快取中,下次使用時不必從資料庫查詢,而是直接從快取中讀取,避免頻繁操作資料庫,減輕資料庫的壓力,同時提高系統性能。 一級快取 一級快取是SqlSession級別的快取。在操作資料庫時需要

客觀面試題--30.hibernate的一級快取二級快取有什麼區別?

快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。  快取的介質一般是記憶體,所以讀寫

java Hibernate一級快取二級快取概念案例詳解

  一、一級快取二級快取的概念解釋   (1)一級快取就是Session級別的快取,一個Session做了一個查詢操作,它會把這個操作的結果放在一級快取中,如果短時間內這個   session(一定要同一個session)又做了同一個操作,那麼hibernate直接從一級快

hibernate一級快取二級快取的區別與聯絡

快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。   快取的介質一般是記憶體,