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

王正玉,李 斌

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

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

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

0 引言

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

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

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

1 Hibernate原理及應用

  1.1 Hibernate技術(shù)的原理

  Hibernate是個獨立的對象關(guān)系映射系統(tǒng)(ORM)的持久化框架,它本身不依賴于Web服務器(如Tomcat)或應用服務器(如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è)務的POJO(Plain Ordinary Java Objects)對象并通過Hibernate及映射文件的定義來實現(xiàn)其業(yè)務對象的持久化管理。

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

  1.3 Hibernate的核心接口

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

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

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

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

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

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

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

  在本文設計的網(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)

 ?。?;

 ?。?)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)

  );

 ?。?)用戶表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,存放當前已交易的訂單信息。創(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,//當前發(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ā)步驟及應用

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

006.jpg

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

2 DAO模式的介紹

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

002.jpg

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

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

3 基于DAO模式的Hibernate設計及應用

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

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

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

003.jpg

  網(wǎng)上書店系統(tǒng)可以實現(xiàn)與數(shù)據(jù)庫的連接和相應的操作?,F(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設計方法很好地完成了該Web系統(tǒng)的數(shù)據(jù)層設計。

5 總結(jié)

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

參考文獻

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

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

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

  [4] 錢忠勝.基于Hibernate的數(shù)據(jù)持久化研究及其應用[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)載。
主站蜘蛛池模板: 在线观看成年人视频 | 亚洲网在线 | 久久大香伊蕉在人线国产联合 | 久久99精品一级毛片 | 成年午夜视频免费观看视频 | 免费h黄肉动漫在线观看 | 成人三级在线播放 | 久久成人性色生活片 | 九九精品久久 | 天天拍夜夜添久久精品免费 | 一级片视频免费 | 一级女人18毛片免费 | 亚洲欧美成人综合 | 欧美大成色www永久网站婷 | 天天躁 | 深夜免费在线观看 | 狠狠操视频网 | 免费观看污污视频 | 日韩不卡一级毛片免费 | 人人澡 人人澡 人人看欧美 | 国产在线观看黄色 | 国产一区二区三区在线影院 | 亚洲经典一区二区三区 | 色综合久久加勒比高清88 | 日本人成18在线播放 | 日韩欧美h | 日本a在线视频 | 国产一区二区三区免费 | www.一级片 | 香蕉久久夜色精品国产小优 | 中文天堂在线www | 成人免费视频在线播放 | 一丝不遮视频免费观看 | 在线中文字幕网 | 麻豆回家视频区一区二 | 一本大道香蕉在线观看视频 | 丰满毛片| 亚洲欧美国产日本 | xxx.国产| 欧美区在线播放 | 一级国产黄色片 |