1. 程式人生 > >Hibernate入門 (二)三種狀態

Hibernate入門 (二)三種狀態

依賴 區分 dia 讀取配置文件 hibernate conn null threads 定時

.大配置
方言
property name="dialect" 取值
自動構建表結構
property name="hbm2ddl" true
connection_url: 連接字符串
顯示sql
show_sql
格式化SQL
format_sql
2.Hibernate測試類中操作步驟
7個步驟
1.讀取配置文件,形成config對象
2.SessionFactory
3.獲取Session
4.開啟一個事務
5.執行操作
6.結束(提交或者回滾)
7.關閉
3.小配置
<class name="Dept" table="Dept">
<id property="deptno" column="deptno">
主鍵生成策略 : 數據庫
<generator class="native"></generator>
</id>
</class>

4.idea引入依賴(使用的Oralce的話)
1.手工jar包註冊到倉庫中
1.有maven環境
2.修改conf/settings.xml 中的路徑,改成自己倉庫的路徑
3.註冊命名 mvc insatll:install-file -Dgroupid
2、直接物理引用
5.按主鍵查詢
get
load

區別1:load:代理對象
get: 永遠返回的是原始對象本身

區別2:如果load/get 加載的記錄數據不存在,get返回null 。load拋出異常ObjectNotFoundException

6.添加
註意事項:需要事務環境
session.save(dog);

7.補充了兩種獲取session的方案
openSession()
getCurrentSession()--------------->你得在大配置中。
<property name="current_session_context_class">thread</property>
導致的結果,自己就不用手動的關閉連接了。
--------------------------------------------------------------
修改
update()
merge(): save() update() 有沒有OID
saveOrUpdate() 修改

saveOrUpdate()和merge()區別
解析:區別 1:saveOrUpdate() 會改變入參進來對象的狀態 merge不會
區別 2: saveOrUpdate() 沒有返回值 merge返回一個對象

2.OID
OID 是持久化類(Student)與數據表主鍵對應屬性, 用來唯一區分持久化對象。
3.刪除

4.PO VO DTO POJO JavaBean
JavaBean=POJO 和數據庫無關的 PageUtil類,需要持久化不不需要
PO=POJO+xml

5.主鍵生成策略
Increment :hibernate生成,弊端:多線程可能取到的是同一個id,但是導致其他線程保存失敗
identity: 數據庫生成 ,mysql支持,oracle不支持
sequence: 數據庫生成,oracle支持
native: 數據庫決定:mysql使用identity,oralce使用序列
uuid Hibernate生成 優點:不會重復,數據遷移比較好 要求:列的類型字符串
assigned :程序員手動操作的。

OID
Hibernate中Java對象的三種狀態
get和load



/**
* 在 increment基礎之上操作!
* hibernate中的三種狀態
*
* 01.瞬時狀態 Student stu=new Student();
* 新創建的對象,沒有與session產生關聯!
* 02.持久狀態 session.save(stu)
* 被session管理,存在session緩存中!當commit的時候,會提交到數據庫!
* 03.遊離狀態 session.close(); stu
* 曾經被session管理過,但是現在不存在session緩存中了!
*
*
* 瞬時狀態 和遊離狀態的區別在於:是否被session管理過! 對象是否擁有OID(對象標識符)!
*
* 對象有主鍵值id,那麽就有OID,在操作的時候會執行update語句!
* 沒有主鍵值id,那麽就沒有OID,在操作的時候會執行insert語句!
*
* 對象只要是沒有OID,在執行update()肯定報錯!在執行saveOrupdate的時候會執行Save()方法!
*
*/

6.核心API
6.1 Configuration
InputStream x = ConfigHelper.getResourceAsStream("/hibernate.properties");
hibernate.hbm.xml配置文件

6.2 SessionFactory:重量級的,一個程序中一份就可以了。線程安全的。
Creates Sessions. Usually an application has a single SessionFactory.
Threads servicing client requests obtain Sessions from the factory.

創建會話。通常, 應用程序有一個單一的 SessionFactory。
服務客戶端請求的線程從工廠獲取會話。
SessionFactorys are immutable. The behaviour of a SessionFactory
is controlled by properties supplied at configuration time.
These properties are defined on Environment.

SessionFactorys 是不可變的。SessionFactory 的行為由配置時提供的屬性控制。
這些屬性是在環境中定義的。

線程安全的::方法中來用一個對象,不用考慮線程安全問題
成員變量,發現他是一個接口,接口中都是方法

6.3 Session 他也是一個接口,實現類是SessionImpl ,當中也是方法,但是他是線程非安全的。
Session構建兩種方式

方式一:factory.openSession(); 隨機從連接池中獲取到一個連接。

factory.getCurrentSession(); 一定獲取的是和當前線程綁定的session.

6.4 事務

7.刷新緩存(某一時刻點觸發的動作)
12: 睡覺了 脫衣服
28 結婚 入洞房 腦洞打開,自己想。否則就不好玩了 (怎麽入洞房)
tx.commit() ;刷新緩存 刷新緩存做什麽 (做臟檢查)

快照(Snapshot)是某個數據集在某一特定時刻的鏡像,也稱為即時拷貝,它是這個數據集的一個完整可用的副本

1.修改
update
merge()
saveOrUpdate()

2.刪除

3.PO DTO VO POJO JavaBean

4.主鍵生成策略
native
uuid
assigned

5.在Hibernate中Java對象的三種狀態
瞬時態
持久態
遊離態

瞬時態---->持久態 save() load() get()

持久態---->遊離態 clear() close() evict()

遊離態---->瞬時態 delete()

瞬時態和遊離態?有沒有OID
6.OID 持久化對象的唯一標誌。OID一定是和底層數據表中記錄的主鍵值綁定的。

7.Hibernate API
Configuration 類

SessionFactory 接口 SessionFactoryImpl

Session 接口 SessionImpl
session:getCurrentSession()當前線程綁定 調度多次 內存地址一樣,同一個對象
openSession() :每次獲取到的session一定是新的。
Transaction

Hibernate入門 (二)三種狀態