延遲載入又叫懶載入,也叫按需載入。也就是說先載入主資訊,在需要的時候,再去載入從資訊。
在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...