一说搅、Hibernate開發(fā)步驟
1. 創(chuàng)建 Hibernate 配置文件
2. 創(chuàng)建持久化類
3. 創(chuàng)建對(duì)象-關(guān)系映射文件
4. 通過 Hibernate API 編寫訪問數(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 類
提供一個(gè)無(wú)參的構(gòu)造器:使Hibernate可以使用Constructor.newInstance() 來(lái)實(shí)例化持久化類
提供一個(gè)標(biāo)識(shí)屬性(identifier property): 通常映射為數(shù)據(jù)庫(kù)表的主鍵字段. 如果沒有該屬性,一些功能將不起作用浇垦,如:Session.saveOrUpdate()
為類的持久化類字段聲明訪問方法(get/set): Hibernate對(duì)JavaBeans 風(fēng)格的屬性實(shí)行持久化氯材。
使用非 final 類: 在運(yùn)行時(shí)生成代理是 Hibernate 的一個(gè)重要的功能. 如果持久化類沒有實(shí)現(xiàn)任何接口, Hibnernate 使用 CGLIB 生成代理. 如果使用的是 final 類, 則無(wú)法生成 CGLIB 代理.
重寫 eqauls 和 hashCode 方法: 如果需要把持久化類的實(shí)例放到 Set 中(當(dāng)需要進(jìn)行關(guān)聯(lián)映射時(shí)), 則應(yīng)該重寫這兩個(gè)方法
Hibernate 不要求持久化類繼承任何父類或?qū)崿F(xiàn)接口,這可以保證代碼不被污染诚些。這就是Hibernate被稱為低侵入式設(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. 通過 Hibernate API 編寫訪問數(shù)據(jù)庫(kù)的代碼
四、使用 Hibernate 進(jìn)行數(shù)據(jù)持久化操作砸烦,通常有如下步驟:
編寫持久化類: POJO + 映射文件
獲取 Configuration 對(duì)象
獲取 SessionFactory 對(duì)象
獲取 Session弃鸦,打開事務(wù)
用面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù)
關(guān)閉事務(wù),關(guān)閉 Session
五幢痘、Configuration 類
Configuration 類負(fù)責(zé)管理 Hibernate 的配置信息唬格。包括如下內(nèi)容:
Hibernate 運(yùn)行的底層信息:數(shù)據(jù)庫(kù)的URL、用戶名颜说、密碼购岗、JDBC驅(qū)動(dòng)類,數(shù)據(jù)庫(kù)Dialect,數(shù)據(jù)庫(kù)連接池等(對(duì)應(yīng) hibernate.cfg.xml 文件)门粪。
持久化類與數(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ù)的訪問:
File file = new File(“simpleit.xml”);
Configuration cfg = new Configuration().configure(file);
六喊积、SessionFactory 接口
針對(duì)單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過編譯后的內(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剖效。
持久化類與 Session 關(guān)聯(lián)起來(lái)后就具有了持久化的能力。
Session 類的方法:
取得持久化對(duì)象的方法: get() load()
持久化對(duì)象都得保存焰盗,更新和刪除:save(),update(),saveOrUpdate(),delete()
開啟事務(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():撤銷事務(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ì)刪除上一次的表 ,重新生成表, 哪怕二次沒有任何改變
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