Hibernate的Session詳解

堅持每天寫博文,積累下開發中的點點滴滴

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章