1)Hibenate中一級緩存,也叫作session的緩存,它能夠在session範圍內減小數據庫的訪問次數! 只在session範圍有效! Session關閉,一級緩存失效!面試
2)當調用session的save/saveOrUpdate/get/load/list/iterator方法的時候,都會把對象放入session的緩存中。 sql
3)Session的緩存由hibernate維護, 用戶不能操做緩存內容; 若是想操做緩存內容,必須經過hibernate提供的evit/clear方法操做。數據庫
特色:緩存
只在(當前)session範圍有效,做用時間短,效果不是特別明顯!session
在短期內屢次操做數據庫,效果比較明顯!spa
緩存相關幾個方法的做用hibernate
session.flush(); 讓一級緩存與數據庫同步對象
session.evict(arg0); 清空一級緩存中指定的對象get
session.clear(); 清空一級緩存中緩存的全部對象同步
在什麼狀況用上面方法?
批量操做使用使用:
Session.flush(); // 先與數據庫同步
Session.clear(); // 再清空一級緩存內容
面試題1: 不一樣的session是否會共享緩存數據?
不會。
User1 u1 = Session1.get(User.class,1); 把u1對象放入session1的緩存
Session2.update(u1); 把u1放入session2的緩存
U1.setName(‘new Name’);
若是生成2條update sql, 說明不一樣的session使用不一樣的緩存區,不能共享。
面試題2: list與iterator查詢的區別?
list()
一次把全部的記錄都查詢出來,
會放入緩存,但不會從緩存中獲取數據
Iterator
N+1查詢; N表示全部的記錄總數
即會先發送一條語句查詢全部記錄的主鍵(1),
再根據每個主鍵再去數據庫查詢(N)!
會放入緩存,也會從緩存中取數據!