一、Hibernate開(kāi)發(fā)步驟

1. 創(chuàng)建 Hibernate 配置文件
2. 創(chuàng)建持久化類(lèi)
3. 創(chuàng)建對(duì)象-關(guān)系映射文件
4. 通過(guò) Hibernate API 編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的代碼
二、示例
(1)先導(dǎo)入hibernate必須的包

(2)新建一個(gè)hibernate配置文件


(3)New.java

(4)對(duì)象關(guān)系映射文件

(5)測(cè)試

其中

(6)成功


三、Helloworld詳解
1. 創(chuàng)建持久化 Java 類(lèi)
提供一個(gè)無(wú)參的構(gòu)造器:使Hibernate可以使用Constructor.newInstance() 來(lái)實(shí)例化持久化類(lèi)
提供一個(gè)標(biāo)識(shí)屬性(identifier property): 通常映射為數(shù)據(jù)庫(kù)表的主鍵字段. 如果沒(méi)有該屬性,一些功能將不起作用,如:Session.saveOrUpdate()
為類(lèi)的持久化類(lèi)字段聲明訪問(wèn)方法(get/set): Hibernate對(duì)JavaBeans 風(fēng)格的屬性實(shí)行持久化。
使用非 final 類(lèi): 在運(yùn)行時(shí)生成代理是 Hibernate 的一個(gè)重要的功能. 如果持久化類(lèi)沒(méi)有實(shí)現(xiàn)任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是 final 類(lèi), 則無(wú)法生成 CGLIB 代理.
重寫(xiě) eqauls 和 hashCode 方法: 如果需要把持久化類(lèi)的實(shí)例放到 Set 中(當(dāng)需要進(jìn)行關(guān)聯(lián)映射時(shí)), 則應(yīng)該重寫(xiě)這兩個(gè)方法
Hibernate 不要求持久化類(lèi)繼承任何父類(lèi)或?qū)崿F(xiàn)接口,這可以保證代碼不被污染。這就是Hibernate被稱(chēng)為低侵入式設(shè)計(jì)的原因
2. 創(chuàng)建對(duì)象-關(guān)系映射文件
Hibernate 采用 XML 格式的文件來(lái)指定對(duì)象和關(guān)系數(shù)據(jù)之間的映射. 在運(yùn)行時(shí) Hibernate 將根據(jù)這個(gè)映射文件來(lái)生成各種 SQL 語(yǔ)句
映射文件的擴(kuò)展名為 .hbm.xml
3. 創(chuàng)建 Hibernate 配置文件
Hibernate 從其配置文件中讀取和數(shù)據(jù)庫(kù)連接的有關(guān)信息,這個(gè)文件應(yīng)該位于應(yīng)用的 classpath 下。
4. 通過(guò) Hibernate API 編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的代碼
四、使用 Hibernate 進(jìn)行數(shù)據(jù)持久化操作,通常有如下步驟:
編寫(xiě)持久化類(lèi): POJO + 映射文件
獲取 Configuration 對(duì)象
獲取 SessionFactory 對(duì)象
獲取 Session,打開(kāi)事務(wù)
用面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù)
關(guān)閉事務(wù),關(guān)閉 Session
五、Configuration 類(lèi)
Configuration 類(lèi)負(fù)責(zé)管理 Hibernate 的配置信息。包括如下內(nèi)容:
Hibernate 運(yùn)行的底層信息:數(shù)據(jù)庫(kù)的URL、用戶(hù)名、密碼、JDBC驅(qū)動(dòng)類(lèi),數(shù)據(jù)庫(kù)Dialect,數(shù)據(jù)庫(kù)連接池等(對(duì)應(yīng) hibernate.cfg.xml 文件)。
持久化類(lèi)與數(shù)據(jù)表的映射關(guān)系(*.hbm.xml 文件)
創(chuàng)建 Configuration 的兩種方式
(1)屬性文件(hibernate.properties):Configuration cfg = new Configuration();
(2)Xml文件(hibernate.cfg.xml)
Configuration cfg = new Configuration().configure();
注:Configuration 的 configure 方法還支持帶參數(shù)的訪問(wèn):
File file = new File(“simpleit.xml”);
Configuration cfg = new Configuration().configure(file);
六、SessionFactory 接口
針對(duì)單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像,是線程安全的。
SessionFactory 對(duì)象一旦構(gòu)造完畢,即被賦予特定的配置信息。
SessionFactory是生成Session的工廠。
構(gòu)造 SessionFactory 很消耗資源,一般情況下一個(gè)應(yīng)用中只初始化一個(gè) SessionFactory 對(duì)象。
Hibernate4 新增了一個(gè) ServiceRegistry 接口,所有基于 Hibernate 的配置或者服務(wù)都必須統(tǒng)一向這個(gè) ServiceRegistry? 注冊(cè)后才能生效。
Hibernate4 中創(chuàng)建 SessionFactory 的步驟

七、Session 接口
Session 是應(yīng)用程序與數(shù)據(jù)庫(kù)之間交互操作的一個(gè)單線程對(duì)象,是 Hibernate 運(yùn)作的中心,所有持久化對(duì)象必須在 session 的管理下才可以進(jìn)行持久化操作。此對(duì)象的生命周期很短。Session 對(duì)象有一個(gè)一級(jí)緩存,顯式執(zhí)行 flush 之前,所有的持久層操作的數(shù)據(jù)都緩存在 session 對(duì)象處。相當(dāng)于 JDBC 中的 Connection。
持久化類(lèi)與 Session 關(guān)聯(lián)起來(lái)后就具有了持久化的能力。
Session 類(lèi)的方法:
取得持久化對(duì)象的方法: get() load()
持久化對(duì)象都得保存,更新和刪除:save(),update(),saveOrUpdate(),delete()
開(kāi)啟事務(wù): beginTransaction().
管理 Session 的方法:isOpen(),flush(), clear(), evict(), close()等
八、Transaction(事務(wù))
代表一次原子操作,它具有數(shù)據(jù)庫(kù)事務(wù)的概念。所有持久層都應(yīng)該在事務(wù)管理下進(jìn)行,即使是只讀操作。
? Transaction tx = session.beginTransaction();
常用方法:
commit():提交相關(guān)聯(lián)的session實(shí)例
rollback():撤銷(xiāo)事務(wù)操作
wasCommitted():檢查事務(wù)是否提交
九、Hibernate 配置文件的兩個(gè)配置項(xiàng)
(1)hbm2ddl.auto:該屬性可幫助程序員實(shí)現(xiàn)正向工程, 即由 java 代碼生成數(shù)據(jù)庫(kù)腳本, 進(jìn)而生成具體的表結(jié)構(gòu). 。取值 create | update | create-drop | validate
create : 會(huì)根據(jù) .hbm.xml? 文件來(lái)生成數(shù)據(jù)表, 但是每次運(yùn)行都會(huì)刪除上一次的表 ,重新生成表, 哪怕二次沒(méi)有任何改變
create-drop : 會(huì)根據(jù) .hbm.xml 文件生成表,但是SessionFactory一關(guān)閉, 表就自動(dòng)刪除
update : 最常用的屬性值,也會(huì)根據(jù) .hbm.xml 文件生成表, 但若 .hbm.xml? 文件和數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)表的表結(jié)構(gòu)不同, Hiberante? 將更新數(shù)據(jù)表結(jié)構(gòu),但不會(huì)刪除已有的行和列
validate : 會(huì)和數(shù)據(jù)庫(kù)中的表進(jìn)行比較, 若 .hbm.xml 文件中的列在數(shù)據(jù)表中不存在,則拋出異常
(2)format_sql:是否將 SQL 轉(zhuǎn)化為格式良好的 SQL . 取值 true | false