百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

基于DAO模式的Hibernate框架 在Java Web开发中的应用

ccwgpt 2025-02-21 12:27 34 浏览 0 评论

王正玉,李 斌

(安徽广播电视大学 远程教育技术与图文信息中心 图书馆,安徽 合肥 230022)

摘 要:Hibernate是目前Java领域中最受欢迎的OR映射开源框架,它的出现使程序员得以摆脱编写繁琐SQL语句的麻烦,将更多的精力用于业务逻辑的设计。DAO即数据访问对象,其目的是实现一种用来操作数据源的访问机制。通过DAO层的抽象,将具体的业务逻辑层和数据持久层区分开来,实现了系统与特定数据源的松耦合,即使改变DAO实现代码也不会影响业务层的调用。通过案例,对基于DAO模式的Hibernate框架技术进行了介绍。

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所示。

从图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,

(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,//充值信息

(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,//当前发货状态

(5)评价表remark存放书籍的相关评价信息。创建该表的Oracle语句如下:

CREATE TABLE remark(

id number(10)NOT NULL,//评价信息ID

grade number(3)NOT NULL,//评价等级

remark varchar2(50)NOT NULL,//评价内容

date1 date NOT NULL,//评价日期

1.5 Hibernate技术的开发步骤及应用

Hibernate的开发步骤大体分为三步:(1)持久化类的设计。所谓的持久化类是指POJO类。(2)持久化类和关系数据库的映射。(3)应用的开发。

本文按照Hibernate的开发步骤设计了网上书店系统的数据层。将数据库中表与持久化类一一对应,对应关系如表1所示。在对应类中,设置对应表的相应字段的变量及获取,设置该字段值的方法。接着在各自持久化类对应的.hbm.xml映射文件中,设置了各自类与其对应的表的映射环境参数。最后再在基于DAO模式的技术中进行相关应用开发。

2 DAO模式的介绍

数据访问对象模型(Data Access Object)负责沟通数据库,处于业务逻辑层与数据源之间,是一种抽象数据源,其目的是为了提供业务逻辑对数据的透明访问。具体模式结构如图2所示。

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所示。

网上书店系统可以实现与数据库的连接和相应的操作。现通过向用户表中添加一个用户数据举例如下。

假定要添加一个名为“香成”的用户信息,首先在Oracle数据库中查看userinfo表中有无这个用户。结果如下图4所示。

接着,在网上书店系统中注册一个用户“香成”,然后在Oracle数据库中查看是否已经添加该用户,具体如图5、图6所示。

最后,用该用户登录网站,并成功登录。如图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.

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: