Hibernate的一级缓存
Hibernate的一級緩存
什么是緩存:緩存將數據庫/硬盤上文件中數據,放入到緩存中(就是內存中一塊空間).當再次使用的使用,可以直接從內存中獲取
緩存的好處:提升程序運行的效率.緩存技術是Hibernate的一個優化的手段
Hibernate分成兩個基本的緩存:
一級緩存:Session級別的緩存.一級緩存與session的生命周期一致.自帶的.不可卸載.
二級緩存:SessionFactory級別的緩存.不是自帶的.
在 Session 接口的實現中包含一系列的 Java 集合, 這些 Java 集合構成了 Session 緩存. 只要 Session 實例沒有結束生命周期, 存放在它緩存中的對象也不會結束生命周期.
證明Hibernate的一級緩存的存在
@Test // 證明一級緩存的存在 public void demo3(){Session session = HibernateUtils.openSession();Transaction tx = session.beginTransaction();
// 分別用get執行兩次查詢.Book book1 = (Book) session.get(Book.class, 1);// 馬上發生SQL去查詢System.out.println(book1);Book book2 = (Book) session.get(Book.class, 1);// 不發生SQL,因為使用一級緩存的數據System.out.println(book2);tx.commit();session.close(); }
?
深入理解一級緩存中快照區
結論:向一級緩存存入數據的時候,放入一級緩存區和一級緩存快照區,當更新了一級緩存的數據的時候,事務一旦提交,比對一級緩存和快照區,如果數據一致,不更新,如果數據不一致,自動更新數據庫.
Hibernate管理一級緩存
一級緩存是與session的生命周期相關的.session生命周期結束,一級緩存就銷毀了
clear()/evict()/flush()/refresh()管理一級緩存
clear() :清空一級緩存中所有的對象.
evict(Object obj) :清空一級緩存中某個對象.
flush() :刷出緩存.
refresh(Object obj):將快照區的數據重新覆蓋了一級緩存的數據.
Hibernate一級緩存的刷出時機:(了解)
FlushMode:常量,有如下取值:
ALWAYS :每次查詢的時候都會刷出.手動調用flush.事務提交的時候.
AUTO :默認值.有些查詢會刷出.手動調用flush.事務提交的時候.
COMMIT :在事務提交的時候,手動調用flush的時候.
MANUAL :只有在手動調用flush才會刷出.
嚴格程度:MANUAL > COMMIT > AUTO > ALWAYS
session.setFlushMode(FlushMode.MANUAL);// 可以通過此語句設置該常量
轉載于:https://www.cnblogs.com/fengmingyue/p/6171179.html
總結
以上是生活随笔為你收集整理的Hibernate的一级缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一条德芙为什么有三段?
- 下一篇: 华为耳机多少钱啊?