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

王正玉,李 斌

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

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

  關鍵詞: Hibernate;DAO模式;數據持久;框架

0 引言

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

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

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

1 Hibernate原理及應用

  1.1 Hibernate技術的原理

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

  ORM是一種為了解決面向對象與關系數據庫存在的互不匹配問題而出現的一種技術。簡單地說,ORM是通過使用描述對象和數據庫之間映射的元數據,將Java程序中的對象自動持久到關系數據庫中。ORM是隨著面向對象的軟件開發方法的發展而產生的。ORM系統通常以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。ORM具有實體映射、關系映射、高級查詢、事物處理、實體類和操作類的生成等五大特征。

  1.2 Hibernate的體系結構

  Hibernate主要由持久化對象、配置文件和對象關系映射文件構成。如下圖1所示。

001.jpg

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

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

  1.3 Hibernate的核心接口

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

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

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

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

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

  (5)Query。在Hibernate中,HQL語言是Hibernate提供的一個非常強大的面向對象的查詢語言,其語言特性與SQL語言非常類似。

  1.4 例程數據庫設計

  在本文設計的網上書店系統中,其數據庫中共有五張表:

  (1)bookinfo表,存儲書籍相關信息。創建該表的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表,存放書籍相關折扣信息。創建該表的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,存放用戶相關信息。創建該表的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,存放當前已交易的訂單信息。創建該表的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,//當前發貨狀態

  PRIMARY KEY(id)

  );

  (5)評價表remark存放書籍的相關評價信息。創建該表的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,//評價內容

  date1 date NOT NULL,//評價日期

  PRIMARY KEY(id)

  );

  1.5 Hibernate技術的開發步驟及應用

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

006.jpg

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

2 DAO模式的介紹

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

002.jpg

  DAO模式揭示了應用系統與數據源之間的關系。可以看到,應用系統可以包含一個或多個數據訪問對象,并且數據訪問對象可以訪問不同的數據源。對于Web應用而言,數據訪問對象隔離了不同數據源之間的差異,從而實現了業務邏輯層與數據源之間的解耦。

  DAO模式是標準的J2EE設計模式[5]之一。典型的DAO由以下幾個組件構成:(1)DAO數據訪問接口,作為外界訪問數據對象的統一接口;(2)DAO接口的實現類,負責DAO接口對不同數據源的實現;(3)傳遞與DAO層的數據訪問對象(域對象或值對象),保存的是業務狀態數據;(4)DAO工廠類,負責創建不同業務領域的DAO對象。

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

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

4 網上書店數據層結果展示

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

003.jpg

  網上書店系統可以實現與數據庫的連接和相應的操作。現通過向用戶表中添加一個用戶數據舉例如下。

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

004.jpg

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

005.jpg

  最后,用該用戶登錄網站,并成功登錄。如圖7所示。

  上述試驗結果表明,通過基于DAO模式的Hibernate設計方法很好地完成了該Web系統的數據層設計。

5 總結

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

參考文獻

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

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

  [3] 陳松.J2EE電子商務系統開發從入門到精通:基于Struts和Hibernate技術實現[M].北京:清華大學出版社,2007.

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

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


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲嫩草精品久久| 一区二区三区国产| 欧美日韩不卡合集视频| 久久综合影视| 久久精品国产亚洲一区二区| 午夜国产精品影院在线观看| 亚洲手机在线| 一区二区日韩| 一区二区免费在线视频| aⅴ色国产欧美| 日韩一二三区视频| 日韩视频一区二区三区在线播放免费观看 | 国产精品99久久久久久白浆小说| 亚洲欧洲一区二区在线观看| 亚洲国产黄色| 91久久国产综合久久91精品网站 | 一区精品在线| 伊人久久男人天堂| 亚洲国产高清高潮精品美女| 亚洲激情第一区| 亚洲精品综合精品自拍| 99re6热在线精品视频播放速度| 亚洲美女av在线播放| 99精品欧美| 亚洲综合激情| 午夜精品成人在线| 久久精品国产99国产精品澳门| 亚洲第一免费播放区| 亚洲激情一区| 一区二区久久久久| 午夜免费久久久久| 久久精品毛片| 免费在线欧美黄色| 欧美精品日韩一区| 欧美精品在欧美一区二区少妇| 欧美日韩国产三区| 国产精品久久波多野结衣| 国产精品免费观看视频| 国产香蕉久久精品综合网| 黄色日韩网站| 亚洲精品之草原avav久久| 一本久久综合亚洲鲁鲁五月天| 亚洲自拍偷拍一区| 久久精品官网| 一本久久a久久免费精品不卡| 亚洲欧美日本在线| 久久久一区二区| 欧美精品www在线观看| 欧美性视频网站| 国产日韩综合一区二区性色av| 一区二区三区在线免费视频| 亚洲精品亚洲人成人网| 亚洲欧美99| 亚洲欧洲美洲综合色网| 亚洲一区在线视频| 久久久之久亚州精品露出| 欧美~级网站不卡| 国产精品进线69影院| 在线观看91精品国产麻豆| 亚洲精品久久久久久久久久久| 亚洲视频欧美在线| 久久精品91久久香蕉加勒比| 亚洲久久一区| 欧美伊人久久| 欧美精品久久99| 国产精品少妇自拍| 亚洲国产清纯| 亚洲欧美国产精品专区久久| 亚洲国产精品热久久| 亚洲一区在线免费观看| 久久久亚洲影院你懂的| 欧美日韩免费观看一区=区三区| 国产精品免费看久久久香蕉| 精品99一区二区三区| 亚洲免费观看高清在线观看| 亚洲欧美日韩国产中文| 亚洲美女中文字幕| 欧美影院视频| 欧美日韩一二三四五区| 伊人精品视频| 亚洲免费视频观看| 99精品欧美一区二区蜜桃免费| 欧美在线观看一二区| 欧美精品久久一区| 国产综合欧美| 亚洲一区二区三| 在线亚洲国产精品网站| 免播放器亚洲一区| 国产日韩欧美综合| 一本大道久久a久久精二百| 亚洲黄色av| 久久精品亚洲一区| 国产精品美女久久久久久2018| 亚洲老司机av| 亚洲激情第一页| 久久久久国色av免费看影院| 国产精品系列在线播放| 日韩视频一区二区| 亚洲激情一区| 久久影视精品| 国产亚洲欧美日韩日本| 亚洲影院在线观看| 亚洲视频免费在线| 欧美日韩精品二区第二页| 亚洲国产精品久久| 亚洲国产精品久久久久婷婷老年 | 欧美多人爱爱视频网站| 黑人一区二区三区四区五区| 亚洲一区二区三区午夜| 亚洲一本视频| 欧美日韩另类一区| 亚洲人成网站在线观看播放| 亚洲激情在线视频| 欧美1区视频| 一区二区三区在线免费视频| 久久国产乱子精品免费女 | 国产欧美一区二区视频| 亚洲一区三区电影在线观看| 一区二区三区福利| 欧美日韩国产综合网| 亚洲精品视频免费| 99视频在线精品国自产拍免费观看 | 久久精品视频一| 欧美在线播放一区| 国产精品亚洲网站| 亚洲欧美另类综合偷拍| 午夜在线成人av| 国产精品一区二区在线观看不卡 | 亚洲国产岛国毛片在线| 亚洲国产精品女人久久久| 免费观看日韩av| 亚洲福利小视频| 日韩视频在线观看| 欧美日韩国产综合视频在线观看| 日韩午夜av电影| 亚洲欧美成人| 国产精品亚洲网站| 欧美影院精品一区| 老司机午夜免费精品视频| 亚洲人成高清| 亚洲午夜精品久久久久久浪潮| 欧美性做爰毛片| 亚洲欧美日韩综合aⅴ视频| 久久精品视频在线看| 1000部国产精品成人观看| 日韩亚洲综合在线| 国产精品普通话对白| 欧美一区二区三区四区视频| 男女视频一区二区| 亚洲美女福利视频网站| 欧美一级黄色录像| 黑人一区二区三区四区五区| 日韩手机在线导航| 国产精品yjizz| 久久精品国产999大香线蕉| 欧美福利在线观看| 一区二区成人精品 | 亚洲视频免费| 久久婷婷激情| 亚洲巨乳在线| 欧美一区二区视频在线| 一区免费观看| 亚洲天堂av在线免费| 国产日韩欧美在线视频观看| 亚洲黄色av| 国产精品v亚洲精品v日韩精品 | 中文在线资源观看网站视频免费不卡 | 亚洲精品国产精品国产自| 亚洲欧美国产日韩天堂区| 红桃视频国产一区| 夜夜嗨av一区二区三区| 国产精品入口66mio| 亚洲欧洲精品天堂一级| 国产精品久久久久久久久果冻传媒| 欧美在线亚洲综合一区| 欧美剧在线观看| 亚洲欧美日韩视频二区| 欧美va亚洲va日韩∨a综合色| 亚洲视频福利| 欧美成人免费网| 亚洲伊人一本大道中文字幕| 欧美高清在线精品一区| 亚洲男同1069视频| 欧美激情视频网站| 欧美在线播放| 欧美性开放视频| 亚洲国产成人在线播放| 国产精品久久久久久久久久三级| 亚洲国产精品va在线看黑人动漫| 国产精品第一页第二页第三页| 久久精品日产第一区二区| 国产精品a久久久久久| 最新国产乱人伦偷精品免费网站| 国产精品一二三四区| av成人老司机| 国际精品欧美精品| 午夜精品福利一区二区三区av| 亚洲国产精品一区二区第四页av | 亚洲一区影音先锋| 亚洲经典自拍|