Hibernate 的一級快取
Session 物件的一級快取
1. 什麼是快取?
* 其實就是一塊記憶體空間,將資料來源(資料庫或者檔案)中的資料存放到快取中.再次獲取的時候 ,直接從快取中獲取.可以提升程式的效能!
2. Hibernate框架提供了兩種快取
* 一級快取 -- 自帶的不可解除安裝的.一級快取的生命週期與session一致.一級快取稱為session級別的快取.
* 二級快取 -- 預設沒有開啟,需要手動配置才可以使用的.二級快取可以在多個session中共享資料,二級快取稱為是sessionFactory級別的快取.
package com.kunaly.test;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.kunaly.domain.User;
import com.kunaly.utils.HibernateUtils;
/**
* session 的一級快取的驗證
* @author Administrator
*
*/
public class Demo04 {
/**
* 證明快取的存在
*/
@Test
public void run1(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
// 建立物件
User user = new User();
user.setName("趙雲");
user.setAge(18);
// 儲存使用者,user一級存入到session的快取中
Serializable id = session.save(user);
System.out.println(id);
//獲取物件,不會看到查詢的sql語句
User user2 = session.get(User.class, id);
System.out.println(user2.getName());
System.out.println("觀察是否出現查詢的sql語句,未出現則代表從快取中取的");
tr.commit();
session.close();
}
/**
* 證明快取的存在
*/
@Test
public void run2(){
Session session = HibernateUtils.getSession();
Transaction tr = session.beginTransaction();
//最簡單的證明 查詢兩次 看sql語句出現的次數
User user1 = session.get(User.class, 1);
System.out.println(user1.getName());
//清除user物件
//session.evict(user1);
//清空快取
//session.clear();
User user2 = session.get(User.class, 1);
System.out.println(user2.getName());
tr.commit();
session.close();
}
}
3. Session物件的快取概述
* Session介面中,有一系列的java的集合,這些java集合構成了Session級別的快取(一級快取).將物件存入到一級快取中,session沒有結束生命週期,那麼物件在session中存放著
* 記憶體中包含Session例項 --> Session的快取(一些集合) --> 集合中包含的是快取物件!
4. 證明一級快取的存在,編寫查詢的程式碼即可證明
* 在同一個Session物件中兩次查詢,可以證明使用了快取
如下:
5. Hibernate框架是如何做到資料發生變化時進行同步操作的呢?
* 使用get方法查詢User物件
* 然後設定User物件的一個屬性,注意:沒有做update操作。發現,資料庫中的記錄也改變了。
* 利用快照機制來完成的(SnapShot) 快照機制參照連線:點選開啟連結
控制 Session 的一級快取
1. 學習Session介面中與一級快取相關的方法
* Session.clear() -- 清空快取。
* Session.evict(Object entity) -- 從一級快取中清除指定的實體物件。
* Session.flush() -- 刷出快取
相關文章
- Hibernate的一級快取快取
- Hibernate的一級快取Session和二級快取SessionFactory快取Session
- Hibernate中一級快取和二級快取使用詳解快取
- Hibernate一級快取(session)與二級快取(sessionFactory)的知識點。快取Session
- Hibernate---快取機制四(一,二級快取的比較)快取
- hibernate的查詢快取和二級快取的配合使用快取
- hibernate二級快取問題!快取
- hibernate(二)一級快取和三種狀態解析快取
- MyBatis快取機制(一級快取,二級快取)MyBatis快取
- hibernate一二級快取簡單介紹快取
- Hibernate中二級快取(sessionFactory)的配置及其使用。快取Session
- MyBatis中的一級快取和二級快取介紹MyBatis快取
- hibernate中lazy與二級快取問題快取
- 【hibernate】Session快取Session快取
- hibernate(九) 二級快取和事務級別詳講快取
- Mybatis一級快取MyBatis快取
- Mybatis的快取——一級快取和原始碼分析MyBatis快取原始碼
- mybatis快取之一級快取(一)MyBatis快取
- hibernate的查詢快取薦快取
- mybatis原始碼學習:一級快取和二級快取分析MyBatis原始碼快取
- mybatis快取之一級快取(二)MyBatis快取
- Hibernate中的Session快取問題Session快取
- 關於 Hibernate快取的問題快取
- mybatis快取-二級快取MyBatis快取
- Mybatis的二級快取、使用Redis做二級快取MyBatis快取Redis
- Mybatis 一級快取和二級快取原理區別 (圖文詳解)MyBatis快取
- Hibernate【快取】知識要點快取
- 再算上4MB一級快取、32MB二級快取,一顆64核心的霄龍快取
- 被mybatis一級快取坑了MyBatis快取
- hibernate快取機制書目錄快取
- hibernate快取機制詳細分析快取
- Hibernate 所有快取機制詳解快取
- Mybatis 一級快取和引發的問題MyBatis快取
- 探討下如何更好的使用快取 —— Redis快取的特殊用法以及與本地快取一起構建多級快取的實現快取Redis
- Hibernate 基本操作、懶載入以及快取快取
- mybatis一級快取(session cache)引發的問題MyBatis快取Session
- mybatis原始碼詳細解析(2)---- 一級,二級快取MyBatis原始碼快取
- mybatis基礎系列(四)——關聯查詢、延遲載入、一級快取與二級快取MyBatis快取