[TOC]
# 簡介
Hibernate的一級緩存就是指session緩存。

actionQueue它是一個行列隊列,它主要記錄crud操作的相關信息
persistenceContext它是持久化上下文,它其實是真正緩存。
在session中定義了一系列的集合來存儲數據,它們構成session緩存。
只要session沒有關閉,它就會一直存在。
當我們通過hibernate中的session提供的一些API例如 save get update等進行操作時,就會將持久化對象保存到session中,當下一次在去查詢緩存中具有的對象(OID值來判斷),
就不會去從數據庫查詢,而是直接從緩存中獲取。
Hibernate的一級緩存存在的目的就是為了減少對數據庫訪問。
在hibernate中還有一個二級緩存,它是SessionFactory級別緩存。
# 一級緩存
## 簡介

演示一級緩存的存在

持久化對象具有自動更新數據庫的能力

**為什么持久化對象具有自動更新數據庫的能力?**


## 一級緩存常用API
一級緩存特點:
1. 當我們通過session的save,update saveOrupdate進行操作時,如果一級緩存中沒有對象,會將這些對象從數據庫中查詢到,存儲到一級緩存。
2. 當我們通過session的load,get,Query的list等方法進行操作時,會先判斷一級緩存中是否存在,如果沒有才會從數據庫獲取,并且將查詢的數據存儲到一級緩存中。
3. 當調用session的close方法時,session緩存清空。
clear 清空一級緩存.
evict 清空一級緩存中指定的一個對象。
refresh重新查詢數據庫,用數據庫中信息來更新一級緩存與快照

一級緩存也叫做session緩存,在一個hibernate session有效,這級緩存的可干預性不強,大多于hibernate自動管理,但它提供清除緩存的方法,這在大批量增加(更新)操作是有效果的,例如,同時增加十萬條記錄,按常規進行,很可能會出現異常,這時可能需要手動清除一級緩存,session.evict以及session.clear.
# Hibernate常用API-Session補充
## update
udpate操作它主要是針對于脫管對象,持久對象具有自動更新能力。
問題1:如果我們直接操作的對象是一個脫管對象,執行update會出現什么情況?
Update操作時,如果對象是一個脫管對象,可以操作,它會將脫管對象轉換成持久對象在操作
如果在session中出現相同的oid兩個對象,會產生異常

問題2脫管對象的oid如果在數據表中不存在,會報異常?

所以:在操作中,建議我們通過持久化對象來直接修改其操作。
## saveOrUpdate
如果對象是一個瞬時對象 --------執行save操作
如果對象是一個脫管對象---------執行update
如果是一個持久對象-------直接返回
## delete
刪除一個脫管對象,與session關聯,在刪除
注意:如果執行delete操作,先刪除一級緩存,在刪除數據庫中的數據。
- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化