Hibernate的一級緩存就是Session的緩存,它實際上是一片內存空間,它是內置的,不能被卸載。在這個緩存中存放了相互關聯的持久化Java對象,Session根據持久化對象的狀態來同步更新數據庫。一個一級緩存是對應一個數據庫事務,是不能被其它事務共享。Hibernate的二級緩存是指SessionFactory的外置緩存,它是一個可插拔的緩存插件。通常狀況下,這個外置緩存是不被啓用的。二級緩存是能夠被多個事務共享的,所以它實現了併發訪問策略和數據過時策略。在持久化層的二級緩存機制中,緩存的範圍能夠分爲事務範圍,進程範圍和羣集範圍。
當應用程序要從數據庫中的查詢一條記錄時,並不會當即向數據庫發送SQL語句,而是先看看第一級緩存中有沒有與該記錄相對應的持久化對象,若是有就直接從第一級緩存中取出該對象;若是在第一級緩存中找不到所需的對象,就查詢第二級緩存,若是仍是沒找到,才從數據庫中找。
批量更新是指在一個事務中更新大批量的數據,批量刪除就是在一個事務中刪除大批量的數據。批量更新和批量刪除能夠避免頻繁的訪問數據庫,可是批量更新也有兩個缺點:1、會佔用大量內存(若是每次更新一千條記錄,那麼就要先把一千個對象存放在內存中,而後一一更新它們);2、執行更新語句的數目太多(每條更新語句只能更新一個對象)。