999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Hibernate的JAVA對象持久化技術

2008-12-31 00:00:00蘇華軍
電腦知識與技術 2008年29期

摘要:Hibernate是一個可實現對象/關系映射的開源框架。分析了Hibernate的基本原理和特點,通過實例介紹了Hibernate框架應用開發的過程和方法。結果表明,利用Hibernate對象持久化服務,可以有效地進行數據庫數據到業務對象的O/R 映射,簡化數據庫操作,降低開發難度,提高開發效率。

關鍵詞:Hibernate;JAVA;對象持久化;對象/關系映射

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)29-0394-03

JAVA Object Persistence Technology Based on Hibernate

SU Hua-jun

(College of Computer Science and Technology,Anhui University of Science Technology, Huainan 232001,China)

Abstract: Hibernate is an open-source framework that carries out the object relational mapping. This paper gives an introduction to Hibernate’s principle and characteristic and than give a program sample to explain how to use Hibernate. The results indicate that the Hibernate object persistence services can effectively carry out database data to business objects O/R mapping, predigest database operations, reduce development difficulties and improve development efficiency.

Key words: Hibernate; JAVA; object persistence; O/R mapping

1 引言

創建和維護數據持久層是J2EE開發的重要部分之一,它的設計成功與否往往對項目開發有著至關重要的影響。以前,大多數項目都是采用JDBC 方式在代碼中直接訪問數據庫,這種訪問方式不僅在開發時代碼冗長,而且在后期也不易移植和擴展。于是,各種團體都試圖尋找出一種解決方案,以便能讓開發人員從復雜、繁瑣的持久層編碼工作中解脫出來。Hibernate 正是在這種需求下誕生的,它為Java 應用提供了一個易用、高效的對象/關系映射框架,極大的簡化了持久層開發。

2 Hibernate持久化技術

2.1 Hibernate簡介

Hibernate是一種Java語言下的對象/關系映射解決方案。它是使用GNU寬通用公共許可證發行的自由、開源的軟件[1]。它為面向對象的領域模型到傳統的關系型數據庫的映射,提供了一個使用方便的框架。它的設計目標是將軟件開發人員從大量相同的數據持久層相關編程工作中解放出來。

Hibernate不僅負責從Java類到數據庫表的映射(包括從Java數據類型到SQL數據類型的映射),還提供了面向對象的數據查詢檢索機制,從而極大地縮短了手動處理SQL和JDBC上的開發時間。另外,Hibernate 可以利用代理模式

來簡化載入類的過程,這將大大減少利用HQL(Hibernate Query Language)從數據庫提取數據的代碼編寫量,從而節約開發時間和開發成本[2]。通過使用Hibernate開發者可以輕松解決在使用傳統的CMP以及JDBC和DAO(Data Access Object)技術開發持久層時遇到的困難,使生產力得到極大的提升。

2.2 Hibernate原理

Hibernate技術本質上是一個提供數據庫服務的中間件。圖1顯示了Hibernate的工作原理。Hibernate在構建Java應用中的作用是:應用程序通過Hibernate對數據庫進行訪問,對持久層操作,而Hibernate自身通過properties配置文件和XML Mapping映射文件將類型映射到數據庫的記錄[5]。從而Application應用可以通過起著應用與數據庫之間的橋梁作用的持久化對象直接訪問數據庫,而不是必須使用JDBC和SQL進行數據的操作。

Hibernate具有很大的靈活性,提供了好幾種不同的運行方式。在輕型體系中,應用程序提供JDBC連接,并且自行管理事務,這種方式使用了Hibernate的一個最小子集;在全面解決體系中,對于應用程序來說,所有底層的JDBC/JTAAPI都被抽象了,Hibernate會照管所有的細節[3]。

2.3 選擇Hibernate的原因及其應用優勢

Hibernate是Java開源項目,其底層代碼對用戶開放,這樣用戶可以在需要的時候修改其源代碼,對其進行功能的定制或者拓展,并且擁有豐富的參考文檔與實例。Hibernate具有一支活躍的社區開發隊伍,這使其長期發展有了穩定的保證。Hibernate使用方便,既適用于桌面程序開發,也可以引入到企業級應用開發中[4]。

由于Hibernate對JDBC進行了輕量級的對象封裝,如果有需要,用戶可以繞過Hibernate,直接訪問JDBC API。Hibernate的Transaction實際上就是底層的JDBC Transaction的封裝,這樣大大簡化了數據持久層的開發與調試,減輕了程序員的負擔[4]。

3 利用Hibernate實現JAVA對象持久化的方法與過程

Hibernate是Java應用程序和關系數據庫之間的橋梁,它負責Java對象和關系數據庫之間的映射。Hibernate內部封裝了通過JDBC訪問數據庫的操作,向上層應用提供了面向對象的數據訪問API。

在應用Hibernate框架時,首先需要編寫它的配置文件;再根據此文件生成映射描述文件,完成Java對象與關系數據庫數據之間的映射,同時生產持久化對象;最后編寫業務邏輯類,以實現具體的業務邏輯,并封裝對Hibernate的訪問。

下面以一個實例來介紹一下Hibernate框架在對象持久化中的應用。

該實例在Hibernate3.0、JDK6.0和MS-SQL2005中運行通過。

1) 在數據庫里面建立一個數據表,表名為userinformation,表的結構如圖2所示:

2) 創建Hibernate配置文件

Hibernate的配置文件有兩種形式:一種是基于XML的,文件名一般為hibernate.cfg.xml;還有一種是JAVA屬性文件。配置文件應該位于應用的classpath中,以便順利讀取。在配置文件中,主要涉及了XML文檔的類型定義,數據庫連結的各種參數以及供Hibernate管理事務,產生SQL和管理JDBC連結時所涉及的數據映射文件等。

下面介紹基于XML的配置文件:

<hibernate-configuration>

<session-factory>

<property name=\"connection.username\">sa</property>//數據庫的登陸用戶名

<property name=\"connection.url\">//數據庫地址

jdbc:sqlserver://localhost:1433;databaseName=MyNetInformation

</property>

//對于每種數據庫Hibernate都有一個方言類,用來區別不同數據庫之間的語法差異

<property name=\"dialect\">org.hibernate.dialect.SQLServerDialect

</property>

<property name=\"connection.profile\">sql2005</property>

<property name=\"connection.password\">534314</property>//數據庫登陸密碼

<property name=\"connection.driver_class\">//數據庫驅動類

com.microsoft.sqlserver.jdbc.SQLServerDriver

</property>

<mapping resource=\"cn/edu/aust/Userinformation.hbm.xml\" /></session-factory>

</hibernate-configuration>

如果要改用別的數據庫,則只需要修改配置文件里面的dialect類,數據庫驅動類,數據庫連結地址,而無需修改程序代碼,這樣就大大的節省了開發成本,同時也增強了程序的可移植性。目前,Hibernate已經對市場上絕大部分的數據庫提供了支持。

3) 創建持久化類(即持久化對象Userinformation.java)

Hibernate要持久化的對象可以使用標準的Javabean,而這個對象的屬性和數據庫中相對應的數據表的列是一一對應的。這里的對應不但指的是對象的屬性和表的列的個數要相同,更重要的是,每個屬性的數據類型要和表中每個列的數據類型要能一一對應。對于類的每個屬性都要有public的getter方法和setter方法,在命名上應嚴格遵守bean的命名規則。

public class Userinformation {

private String username;

private String usernicname;

private String useremail;

public String setUsername(String name) {

this.username = name;

}

public String getUsername() {

return username;

}

......

}

4) 創建對象-關系映射文件(Userinformation.hbm.xml)

Hibernate通過XML格式的文件來指定需持久化的對象和關系數據庫的表之間的映射。

<?xml version=\"1.0\" encoding=\"utf-8\"?>

<!DOCTYPE hibernate-mapping PUBLIC \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"

\"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">

<hibernate-mapping>

<class name=\"cn.edu.aust.Userinformation\" table=\"userinformation\" schema=\"dbo\" catalog=\"MyNetInformation\">//類名和對應的數據庫表名稱

<composite-id name=\"id\" class=\"cn.edu.aust.UserinformationId\">//

<key-property name=\"username\" type=\"java.lang.String\">

<column name=\"username\" length=\"20\" />//屬性和列一一對應

</key-property>

<key-property name=\"usernicname\" type=\"java.lang.String\">

<column name=\"usernicname\" length=\"20\" />

</key-property>

<key-property name=\"useremail\" type=\"java.lang.String\">

<column name=\"useremail\" length=\"30\" />

</key-property>

</composite-id>

</class>

</hibernate-mapping>

Hibernate還為我們提供了四個轉換工具hbm2java(根據映射文件自動生成JAVA源文件),hbm2ddl(根據映射文件自動生成數據庫Schema),XDoclet(根據帶有XDoclet標記的JAVA源文件生成映射文件),Middlegen(根據數據庫Schema自動生成映射文件)。利用這幾個工具,可以大大減少我們的工作量,提高工作效率,同時也可以減少出錯的可能性。

5) 通過Hibernate API訪問數據庫

要進行數據操作,首先要連接數據庫,根據Hibernate 的配置文件hibernate.cfg.xml,執行以下代碼即可完成數據庫的連接,同時提供Hibernate的對外接口:

Configuration cfg = new Configuration().configure(“hibernate.cfg.xml);

SessionFactory sessionFactory = cfg.buildSessionFactory();

得到了全局的SessionFactory,就可以從中獲取sesssion。Session是介于數據連接與事務管理的中間接口,它的作用相當于一個持久對象的緩沖區,Hibernate 可以通過Session 檢測到持久化對象的改變,并及時刷新數據庫。 當獲得session後,就可以進行對象的操作,如查詢,修改,插入,刪除等。利用Hibernate添加一條記錄的語句如下:

Userinformation user = new Userinformation();

Session s = sessionFactory.openSession();

Transactiont t = s.beginTransaction();

s.save(user);

......

從實例可以看出,簡單幾行代碼即可實現對象的持久化操作,將其保持到數據庫中,而與數據庫的連結完全由Hibernate來代勞,在代碼里看不到任何和數據庫有關的代碼。由此可見,采用Hibernate框架在很大程度上簡化了數據庫訪問代碼的編寫量,極大的提高了開發效率。此外,我們還可以使用Hibernate自身提供的查詢語言HQL來進行數據庫查詢。HQL和普通的SQL語句相似,它只是將SQL里的表名和列名用對象名和成員名代替。另外,一般的JDBC查詢返回的是ResultSet對象,而利用HQL查詢返回的是包含了查詢結果對象的List對象,從而不必像傳統JDBC 訪問方式一樣把結果集的數據逐個裝載到一個值對象中。

在Hibernate中,還有許多的高級特性,比如實體對象的識別,Hibernate回調與攔截機制等。

4 結論

Hibernate是一個輕量級的數據持久化對象/關系映射框架。利用其提供的對象持久化服務,可以有效地進行數據庫數據到業務對象的O/R映射,簡化數據庫操作,降低開發難度,提高開發效率,進而使得Java企業級應用開發更加容易、靈活、強大。

參考文獻:

[1] 夏昕,曹曉鋼,唐勇.深入淺出HIBERNATE[M].北京:電子工業出版社,2005.

[2] 孫衛琴.精通HIBERNATE:Java 對象持久化技術詳解[M].北京:電子工業出版社,2005.

[3] 蔡雪燾.Hibernate開發及整合應用大全[M].北京:清華大學出版社.2006.

[4] CHRISTIAN BAUER,GOVIN KING.Hibernate實戰[M].英文版,2版.北京:人民郵電出版社,2007.

[5] http://hibernate.org[EB/OL].

主站蜘蛛池模板: 欧美午夜在线视频| 国产精品免费入口视频| 亚洲国产日韩欧美在线| 日韩中文欧美| 亚洲高清无码久久久| 日韩在线网址| 亚洲嫩模喷白浆| 影音先锋亚洲无码| 成人福利在线视频免费观看| 国产小视频网站| 亚洲一区二区三区国产精华液| 国产精品七七在线播放| 伊人激情综合网| 国产性生大片免费观看性欧美| 日韩欧美中文| 亚洲a免费| 久久国产精品波多野结衣| 久久综合伊人 六十路| 国产高清不卡| 国产美女无遮挡免费视频网站| 天天摸夜夜操| 91探花国产综合在线精品| 午夜一区二区三区| 亚洲人成高清| 精品国产女同疯狂摩擦2| 99久久99这里只有免费的精品 | 伊人久久久大香线蕉综合直播| www.99在线观看| 国产农村妇女精品一二区| 欧美中出一区二区| 欧美啪啪网| 久久久久亚洲Av片无码观看| 中文字幕日韩丝袜一区| 亚洲天堂网视频| 国产欧美另类| 亚洲精品午夜天堂网页| 国产精品无码在线看| 亚洲综合在线最大成人| 2021最新国产精品网站| 婷婷综合色| 日韩视频免费| 日韩精品免费一线在线观看| 日本午夜三级| 小说 亚洲 无码 精品| 亚洲成年网站在线观看| 1769国产精品视频免费观看| 亚亚洲乱码一二三四区| 国产精品99久久久久久董美香| 69免费在线视频| 久久午夜夜伦鲁鲁片不卡| 日韩无码视频专区| 91小视频版在线观看www| 国产精品视频第一专区| 精品黑人一区二区三区| 国产成人无码久久久久毛片| 在线观看亚洲天堂| 在线看AV天堂| 精品人妻一区无码视频| 欧美精品1区| 性色一区| 日本国产精品一区久久久| 国产理论精品| 嫩草在线视频| 欧美性猛交一区二区三区| a级毛片免费网站| 好吊色妇女免费视频免费| 四虎永久在线| 亚洲欧美另类日本| 色哟哟国产精品| 国产成年女人特黄特色大片免费| 国产本道久久一区二区三区| 欧美亚洲日韩不卡在线在线观看| 亚洲无码37.| 久久国产精品波多野结衣| 九九热精品视频在线| 成年看免费观看视频拍拍| 一本色道久久88| 欧洲亚洲欧美国产日本高清| 国产97视频在线| 国产乱人伦AV在线A| 日韩a级毛片| 久久人搡人人玩人妻精品一|