堅持每天寫博文,積累下開發中的點點滴滴
Session
- 使用最廣泛、也被稱爲持久化管理器,它提供和持久化相關的操作(增刪改查等)
- 不是線程安全的,因此,一個session只能由一個線程使用,避免線程共享
- session的最大週期是一個線程;在web中,一個session的最大週期是一個請求
- 輕量級的,創建和銷燬不需要消耗太多資源
- Session中有一個緩存(一級緩存)。存放當前工作單元加載的對象
Session 的一級緩存:
- 查詢兩次ID爲1的對象進行邏輯判斷
public void select() {
Session session = HibernateUtils.getSession();
SessionText st1 = (SessionText)session.get(SessionText.class, 1L);
SessionText st2 = (SessionText)session.get(SessionText.class, 1L);
System.out.println(st1 == st2);
session.close();
}
其結果爲 true,並且只發送了一條SQL語句。 流程是:先從一級緩存(Map
//清除一級緩存的對象
public void select2() {
Session session = HibernateUtils.getSession();
SessionText st1 = (SessionText)session.get(SessionText.class, 1L);
//清除一級緩存的對象
session.evict(st1);
SessionText st2 = (SessionText)session.get(SessionText.class, 1L);
System.out.println(st1 == st2);
session.close();
}
結果發了兩條SQL並且邏輯判斷爲false session.evict();方法傳入的參數必須有ID,剛從session裏面獲取的
- 第二種刪除方法 session.clear(); 清楚一級緩存中全部對象
- 第三種方法,關閉session