Hibernate(二)HelloWord

一、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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Hibernate: 一個(gè)持久化框架 一個(gè)ORM框架 加載:根據(jù)特定的OID,把一個(gè)對(duì)象從數(shù)據(jù)庫(kù)加載到內(nèi)存中OID...
    JHMichael閱讀 2,093評(píng)論 0 27
  • 本文包括: 1、CRM 項(xiàng)目的整體介紹 2、Hibernate 框架概述 3、Hibernate 快速入門(mén) 4、H...
    廖少少閱讀 3,531評(píng)論 9 66
  • 本文中我們介紹并比較兩種最流行的開(kāi)源持久框架:iBATIS和Hibernate,我們還會(huì)討論到Java Persi...
    大同若魚(yú)閱讀 4,436評(píng)論 4 27
  • 目錄 1. Hibernate框架的概述 1.1 Hibernate簡(jiǎn)介 1.2 為什么要學(xué)習(xí)Hibernate ...
    深海魚(yú)Q閱讀 1,120評(píng)論 0 14
  • 連上兩節(jié)課 真的有效 開(kāi)口就說(shuō)thank you 我腦袋里的那撮草可能該澆水了 看個(gè)電影都能看暈車(chē) 凝住了所以看運(yùn)...
    咸酥閱讀 205評(píng)論 0 0

友情鏈接更多精彩內(nèi)容