mybatis延遲載入,快取

2021-09-10 22:38:37 字數 2363 閱讀 4044

延遲載入又叫懶載入,也叫按需載入。也就是說先載入主資訊,在需要的時候,再去載入從資訊。

在mybatis中,resultmap標籤 的association標籤和collection標籤具有延遲載入的功能。

// 1.讀取配置檔案

inputstream is = resources.getresourceasstream("sqlmapconfig.xml");

// 2.通過sqlsessionfactorybuilder建立sqlsessionfactory會話工廠

sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(is);

sqlsession sqlsession = sqlsessionfactory.opensession();

// 由於兩次查詢使用同一session(一級快取是預設開啟的,是session級別的),第一次查詢後(如果沒有對這張表進行進行增刪改操作),

// 第二次就不在去資料庫查詢,直接去快取裡面拿資料

system.out.println(user1);

system.out.println(user2);

// 這裡進行一次(增刪改操作,會清除session快取)

user user = new user();

user.setusername("miracle");

system.out.println(user3);

sqlsession.commit();

sqlsession.close();

1.原因

mybatis本身是乙個持久層框架,它不是專門的快取框架,所以它對快取的實現不夠好,不能支援分布式。

ehcache是乙個分布式的快取框架。

2.新增jar包

ehcache-core-2.6.5.jar mybatis-ehcache-1.0.2.jar

3.設定對映檔案中cache標籤

4.在classpath下新增ehcache的配置檔案

禁用二級快取

重新整理快取

測試

// 1.讀取配置檔案

inputstream is = resources.getresourceasstream("sqlmapconfig.xml");

// 2.通過sqlsessionfactorybuilder建立sqlsessionfactory會話工廠

sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(is);

// 二級快取是sessionfactory級別的,用於對個sqlsession直接共享資料

sqlsession sqlsession1 = sqlsessionfactory.opensession();

sqlsession sqlsession2 = sqlsessionfactory.opensession();

sqlsession sqlsession3 = sqlsessionfactory.opensession();

// 由於下面三個查詢分別使用三個不同的sqlsession,因此會執行三次查詢

// 但是當在mybatis的配置檔案中設定開啟二級快取時,各個sqlsession共享資料,因此只會查詢一次,直到發生增改查

system.out.println(user1);

// 關閉sqlsession,會使查詢結果序列化快取,然後其他sqlsession才能讀到快取

sqlsession1.close();

system.out.println(user1);

system.out.println(user1);

Mybatis延遲載入和查詢快取

在全域性配置引數設定開啟延遲載入總開關 name lazyloadingenabled value true name aggressivelazyloading value false settings 設定項 描述允許值 預設值lazyloadingenabled 全域性性設定懶載入。如果設為 ...

Mybatis的延遲載入和快取

1.mybatis中的延遲載入,也稱為懶載入,是指在進行關聯查詢時,按照設定延遲載入規則推遲對關聯物件的select查詢。延遲載入可以有效的減少資料庫壓力。注意 mybatis的延遲載入只是對關聯物件的查詢有延遲設定,對於主載入物件都是直接執行查詢語句的。2.mybatis根據對關聯物件查詢的sel...

Mybatis延遲載入

現在有這麼乙個需求,要查詢所有的訂單,並且獲得該訂單的詳細資訊。如果一次性把所有需要的資料都請求到,那麼對伺服器和資料庫的開銷會很大,所以可以先載入訂單資訊,需要用到訂單詳情的時候再請求詳情資料。那麼就要用到mybatis的延遲載入 name lazyloadingenabled value tru...