《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于DAO模式的Hibernate框架 在Java Web開發(fā)中的應(yīng)用
基于DAO模式的Hibernate框架 在Java Web開發(fā)中的應(yīng)用
2015年微型機與應(yīng)用第11期
王正玉,李 斌
(安徽廣播電視大學(xué) 遠程教育技術(shù)與圖文信息中心 圖書館,安徽 合肥 230022)
摘要: Hibernate是目前Java領(lǐng)域中最受歡迎的OR映射開源框架,它的出現(xiàn)使程序員得以擺脫編寫繁瑣SQL語句的麻煩,將更多的精力用于業(yè)務(wù)邏輯的設(shè)計。DAO即數(shù)據(jù)訪問對象,其目的是實現(xiàn)一種用來操作數(shù)據(jù)源的訪問機制。通過DAO層的抽象,將具體的業(yè)務(wù)邏輯層和數(shù)據(jù)持久層區(qū)分開來,實現(xiàn)了系統(tǒng)與特定數(shù)據(jù)源的松耦合,即使改變DAO實現(xiàn)代碼也不會影響業(yè)務(wù)層的調(diào)用。通過案例,對基于DAO模式的Hibernate框架技術(shù)進行了介紹。
Abstract:
Key words :

王正玉,李 斌

(安徽廣播電視大學(xué) 遠程教育技術(shù)與圖文信息中心 圖書館,安徽 合肥 230022)

  摘  要Hibernate是目前Java領(lǐng)域中最受歡迎的OR映射開源框架,它的出現(xiàn)使程序員得以擺脫編寫繁瑣SQL語句的麻煩,將更多的精力用于業(yè)務(wù)邏輯的設(shè)計。DAO即數(shù)據(jù)訪問對象,其目的是實現(xiàn)一種用來操作數(shù)據(jù)源的訪問機制。通過DAO層的抽象,將具體的業(yè)務(wù)邏輯層和數(shù)據(jù)持久層區(qū)分開來,實現(xiàn)了系統(tǒng)與特定數(shù)據(jù)源的松耦合,即使改變DAO實現(xiàn)代碼也不會影響業(yè)務(wù)層的調(diào)用。通過案例,對基于DAO模式的Hibernate框架技術(shù)進行了介紹。

  關(guān)鍵詞: Hibernate;DAO模式;數(shù)據(jù)持久;框架

0 引言

  OR Mapping對象關(guān)系映射技術(shù)在Java領(lǐng)域中已經(jīng)取得廣泛的應(yīng)用。Hibernate則是該領(lǐng)域中最受歡迎的OR映射開源框架,Hibernate技術(shù)使程序員得以擺脫編寫繁瑣SQL語句的麻煩,使其將更多精力應(yīng)用于業(yè)務(wù)邏輯的設(shè)計。

  DAO(Data Access Object)即數(shù)據(jù)訪問對象,主要為了實現(xiàn)一種用來操作數(shù)據(jù)源的訪問機制。數(shù)據(jù)源可以是RDBMS關(guān)系數(shù)據(jù)庫、LDAP目錄服務(wù)器、XML文件等。依賴于DAO的業(yè)務(wù)組件為其客戶端使用DAO提供更簡單的接口[1]。

  本文采用一種基于DAO的Hibernate的設(shè)計模式來實現(xiàn)在J2EE開發(fā)[2]的數(shù)據(jù)層表示,數(shù)據(jù)庫為Oracle 10g數(shù)據(jù)庫。并通過編寫例程的方式詳細介紹Hibernate和DAO的原理、技術(shù)及開發(fā)步驟等。

1 Hibernate原理及應(yīng)用

  1.1 Hibernate技術(shù)的原理

  Hibernate是個獨立的對象關(guān)系映射系統(tǒng)(ORM)的持久化框架,它本身不依賴于Web服務(wù)器(如Tomcat)或應(yīng)用服務(wù)器(如JBoss)的支持。Hibernate實質(zhì)上是一種對象關(guān)系映射工具,即它的原理就是ORM[3]。

  ORM是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配問題而出現(xiàn)的一種技術(shù)。簡單地說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將Java程序中的對象自動持久到關(guān)系數(shù)據(jù)庫中。ORM是隨著面向?qū)ο蟮能浖_發(fā)方法的發(fā)展而產(chǎn)生的。ORM系統(tǒng)通常以中間件的形式存在,主要實現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。ORM具有實體映射、關(guān)系映射、高級查詢、事物處理、實體類和操作類的生成等五大特征。

  1.2 Hibernate的體系結(jié)構(gòu)

  Hibernate主要由持久化對象、配置文件和對象關(guān)系映射文件構(gòu)成。如下圖1所示。

001.jpg

  從圖1中可以看出,應(yīng)用層抽象出業(yè)務(wù)的POJO(Plain Ordinary Java Objects)對象并通過Hibernate及映射文件的定義來實現(xiàn)其業(yè)務(wù)對象的持久化管理。

  Hibernate有兩類[4]重要文件,一類是配置文件(擴展名為.cfg.xml),另一類是映射文件(擴展名為.hbm.xml)。映射文件的主要作用是告訴Hibernate如何把POJO對象持久到數(shù)據(jù)庫中。配置文件的作用是對Hibernate環(huán)境進行配置,這里包括使用的數(shù)據(jù)庫或數(shù)據(jù)源等信息。

  1.3 Hibernate的核心接口

  在Hibernate中,其核心接口主要有以下五個:

  (1)Configuration接口。該類抽象了負責(zé)加載Hibernate的配置及映射信息,一個Configuration對象實例代表一個應(yīng)用程序中Java類型到SQL數(shù)據(jù)庫映射的完整集合,Configuration被用來構(gòu)建一個SessionFactory,映射定義則由不同的XML映射定義文件編譯而來。

  (2)SessionFactory接口。其為一個Java接口,它是針對單個數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯得到的內(nèi)存鏡像。單個項目通常只需一個SessionFactory,當(dāng)該項目需操作多個數(shù)據(jù)庫時,必須為每個數(shù)據(jù)庫指定一個SessionFactory。

  (3)Session接口。該接口對于開發(fā)人員來說很重要,表示應(yīng)用程序與數(shù)據(jù)持久層之間交互操作的一個單線程對象,此對象生存期很短。其隱藏了JDBC連接,同時也是Hibernate事務(wù)(Transcation)的工廠。

  (4)Transaction接口。Hibernate通過Transaction來聲明事務(wù)邊界。Hibernate可以配置為JDBC、JTA或CMT三種事務(wù)之一。

  (5)Query。在Hibernate中,HQL語言是Hibernate提供的一個非常強大的面向?qū)ο蟮牟樵冋Z言,其語言特性與SQL語言非常類似。

  1.4 例程數(shù)據(jù)庫設(shè)計

  在本文設(shè)計的網(wǎng)上書店系統(tǒng)中,其數(shù)據(jù)庫中共有五張表:

  (1)bookinfo表,存儲書籍相關(guān)信息。創(chuàng)建該表的Oracle語句如下:

  CREATE TABLE bookinfo(

  id number(10) NOT NULL,//書籍ID

  bookName varchar(128)default′′,//書名

  isbn varchar(64)default ′′,//序列號

  writer varchar(45)NOT NULL,//作者

  publisher varchar(64)default′′,//出版社

  intro varchar2(150),//簡介

  price decimal(5,2)default 0.00,//價格

  remaining number(5)default 0,//庫存量

  picture varchar(32),//書籍封面

  date1 date NOT NULL,//日期

  PRIMARY KEY(id)

  );

  (2)rebate表,存放書籍相關(guān)折扣信息。創(chuàng)建該表的Oracle語句如下:

  CREATE TABLE remark(

  id number(10)NOT NULL,//序列號

  bookid number(10)NOT NULL,//客戶等級

  userid number(10)NOT NULL,//折扣率

  grade number(3)NOT NULL,

  remark varchar2(50)NOT NULL,

  date1 date NOT NULL,

  PRIMARY KEY(id)

  );

  (3)用戶表userinfo,存放用戶相關(guān)信息。創(chuàng)建該表的Oracle語句如下:

  CREATE TABLE userinfo(

  id number(10),//用戶ID

  username varchar(15)NOT NULL,//用戶名

  pwd varchar(32)NOT NULL,//用戶密碼

  email varchar(32)NOT NULL,//用戶郵箱

  address varchar(100)default NULL,//通訊地址

  postcode varchar(6)default NULL,//郵編

  level1 decimal(10,2),//用戶等級

  power number(3)NOT NULL,//充值信息

  PRIMARY KEY(id)

  );

  (4)訂購表order1,存放當(dāng)前已交易的訂單信息。創(chuàng)建該表的Oracle語句如下:

  CREATE TABLE order1(

  id number(10) NOT NULL,//訂單ID

  bookid number(10)NOT NULL,//書籍ID

  userid number(10)NOT NULL,//用戶ID

  number1 number(3)NOT NULL,//銷量

  address varchar2(128)NOT NULL,//通訊地址

  postcode varchar2(6)NOT NULL,//郵編

  orderdate date NOT NULL,//訂購日期

  status number(3)NOT NULL,//當(dāng)前發(fā)貨狀態(tài)

  PRIMARY KEY(id)

  );

  (5)評價表remark存放書籍的相關(guān)評價信息。創(chuàng)建該表的Oracle語句如下:

  CREATE TABLE remark(

  id number(10)NOT NULL,//評價信息ID

  bookid number(10)NOT NULL,//書籍ID

  userid number(10)NOT NULL,//用戶ID

  grade number(3)NOT NULL,//評價等級

  remark varchar2(50)NOT NULL,//評價內(nèi)容

  date1 date NOT NULL,//評價日期

  PRIMARY KEY(id)

  );

  1.5 Hibernate技術(shù)的開發(fā)步驟及應(yīng)用

  Hibernate的開發(fā)步驟大體分為三步:(1)持久化類的設(shè)計。所謂的持久化類是指POJO類。(2)持久化類和關(guān)系數(shù)據(jù)庫的映射。(3)應(yīng)用的開發(fā)。

006.jpg

  本文按照Hibernate的開發(fā)步驟設(shè)計了網(wǎng)上書店系統(tǒng)的數(shù)據(jù)層。將數(shù)據(jù)庫中表與持久化類一一對應(yīng),對應(yīng)關(guān)系如表1所示。在對應(yīng)類中,設(shè)置對應(yīng)表的相應(yīng)字段的變量及獲取,設(shè)置該字段值的方法。接著在各自持久化類對應(yīng)的.hbm.xml映射文件中,設(shè)置了各自類與其對應(yīng)的表的映射環(huán)境參數(shù)。最后再在基于DAO模式的技術(shù)中進行相關(guān)應(yīng)用開發(fā)。

2 DAO模式的介紹

  數(shù)據(jù)訪問對象模型(Data Access Object)負責(zé)溝通數(shù)據(jù)庫,處于業(yè)務(wù)邏輯層與數(shù)據(jù)源之間,是一種抽象數(shù)據(jù)源,其目的是為了提供業(yè)務(wù)邏輯對數(shù)據(jù)的透明訪問。具體模式結(jié)構(gòu)如圖2所示。

002.jpg

  DAO模式揭示了應(yīng)用系統(tǒng)與數(shù)據(jù)源之間的關(guān)系。可以看到,應(yīng)用系統(tǒng)可以包含一個或多個數(shù)據(jù)訪問對象,并且數(shù)據(jù)訪問對象可以訪問不同的數(shù)據(jù)源。對于Web應(yīng)用而言,數(shù)據(jù)訪問對象隔離了不同數(shù)據(jù)源之間的差異,從而實現(xiàn)了業(yè)務(wù)邏輯層與數(shù)據(jù)源之間的解耦。

  DAO模式是標準的J2EE設(shè)計模式[5]之一。典型的DAO由以下幾個組件構(gòu)成:(1)DAO數(shù)據(jù)訪問接口,作為外界訪問數(shù)據(jù)對象的統(tǒng)一接口;(2)DAO接口的實現(xiàn)類,負責(zé)DAO接口對不同數(shù)據(jù)源的實現(xiàn);(3)傳遞與DAO層的數(shù)據(jù)訪問對象(域?qū)ο蠡蛑祵ο螅4娴氖菢I(yè)務(wù)狀態(tài)數(shù)據(jù);(4)DAO工廠類,負責(zé)創(chuàng)建不同業(yè)務(wù)領(lǐng)域的DAO對象。

3 基于DAO模式的Hibernate設(shè)計及應(yīng)用

  在基于DAO模式的Hibernate設(shè)計中,數(shù)據(jù)訪問都是通過DAO層封裝實現(xiàn)的。每個DAO實例都是為一個域?qū)ο蠓?wù);每一個獨立的域?qū)ο蠖加邢鄳?yīng)的DAO實現(xiàn);DAO的職責(zé)是對域?qū)ο筮M行CRUD(即Create、Read、Update、Delete)操作;DAO允許通過簡單的查找方法來返回一組域?qū)ο蟆T贒AO對象中,包含了對POJO類進行的操作。在DAO對象中調(diào)用了Hibernate的Configuraton、Session、Transaction、SessionFactory、Query等核心接口。本文例程中,DAO接口有四類,分別為UserDao類、IorderDao類、IBookDao類和IBaseDao類。上述接口類分別對應(yīng)著各自的接口實現(xiàn)類,分別為UserDaoImpl子類、IorderDaoImpl子類、IBookDaoImpl子類、IBaseDaoImpl子類。

4 網(wǎng)上書店數(shù)據(jù)層結(jié)果展示

  通過這種基于DAO模式的Hibernate設(shè)計方法,完成了網(wǎng)上書店系統(tǒng)的數(shù)據(jù)層設(shè)計工作。系統(tǒng)運行的主界面如圖3所示。

003.jpg

  網(wǎng)上書店系統(tǒng)可以實現(xiàn)與數(shù)據(jù)庫的連接和相應(yīng)的操作。現(xiàn)通過向用戶表中添加一個用戶數(shù)據(jù)舉例如下。

  假定要添加一個名為“香成”的用戶信息,首先在Oracle數(shù)據(jù)庫中查看userinfo表中有無這個用戶。結(jié)果如下圖4所示。

004.jpg

  接著,在網(wǎng)上書店系統(tǒng)中注冊一個用戶“香成”,然后在Oracle數(shù)據(jù)庫中查看是否已經(jīng)添加該用戶,具體如圖5、圖6所示。

005.jpg

  最后,用該用戶登錄網(wǎng)站,并成功登錄。如圖7所示。

  上述試驗結(jié)果表明,通過基于DAO模式的Hibernate設(shè)計方法很好地完成了該Web系統(tǒng)的數(shù)據(jù)層設(shè)計。

5 總結(jié)

  基于DAO的設(shè)計通常對業(yè)務(wù)邏輯層提供一個通用的接口調(diào)用,同時其內(nèi)部實現(xiàn)了一個特定的持久策略,例如采用Hibernate進行持久化操作。通過DAO層的抽象,將具體的業(yè)務(wù)邏輯層和數(shù)據(jù)持久層區(qū)分開來,實現(xiàn)了系統(tǒng)與特定數(shù)據(jù)源的松耦合。從而使得在改變DAO實現(xiàn)代碼時不會影響業(yè)務(wù)層的調(diào)用,優(yōu)化了數(shù)據(jù)訪問,增強系統(tǒng)的可擴展性和維護性。

參考文獻

  [1] 陶俑,李曉軍.Hibernate ORM最佳實踐[M].北京:清華大學(xué)出版社,2007.

  [2] BERRY C A, JOHNCARNELL. J2EE Design Patterns Applied[M]. Birmingham: Wrox Press, 2002.

  [3] 陳松.J2EE電子商務(wù)系統(tǒng)開發(fā)從入門到精通:基于Struts和Hibernate技術(shù)實現(xiàn)[M].北京:清華大學(xué)出版社,2007.

  [4] 錢忠勝.基于Hibernate的數(shù)據(jù)持久化研究及其應(yīng)用[J].微計算機信息,2007,23(24):242-244.

  [5] ALLAMARAJU S. Professional Java server programming J2EE l.3[M]. Birmingham: Wrox Press, 2001.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 九九久久精品视频 | 乱人伦视频69 | 色婷婷影院在线视频免费播放 | 国产在线乱子伦一区二区 | 毛片在线高清免费观看 | 色免费视频 | 99视频网址| 欧美a级完整在线观看 | 草逼视频免费观看 | 波多野结衣一区二区 | 怡春院欧美杂交a | 涩涩视频www在线观看入口 | 91免费永久国产在线观看 | 正品蓝导航永久福利在线视频 | 日本 欧美 在线 | 在线国产小视频 | 性一交一无一伦一精一品 | 日韩一区二区不卡中文字幕 | 91免费永久国产在线观看 | 日韩欧美一区二区三区不卡在线 | 亚洲手机在线 | 一区在线免费 | 国产一级毛片午夜福 | 日韩在线一区二区三区免费视频 | 久久天天丁香婷婷中文字幕 | 黄色影院免费看 | 香蕉视频网站在线 | 久久免费观看国产精品 | 国产一级免费在线观看 | 永久在线观看www免费视频 | 一本大道道无香蕉综合在线 | 在线观看欧洲成人免费视频 | 国产成人精品男人免费 | 制服女子校生在线调教 | 极品美女啪啪无套 | 久久这里有精品视频任我鲁 | 看a级毛片 | 日本欧美一区二区三区免费不卡 | 香蕉成人在线视频 | 亚洲国产日韩在线人高清 磁力 | 色丝瓜视频 |