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

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

yund56 2025-02-25 01:02 5 浏览

王正玉,李 斌

(安徽广播电视大学 远程教育技术与图文信息中心 图书馆,安徽 合肥 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.

相关推荐

重生之我在头条学html网页编程,这一世我一定学好,成为编程高手

有人要问了html是什么东西?就是用来设计网页的一种语言会不会很难啊?这是很多朋友担心的,我告诉大家这是最简单最基础也最容易学习的一款入门级语言,当初我也是经常因为学不会C语言而苦恼自从学习了html...

如何在网页3D CAD中创建一个三维管道模型

前言在网页CAD中进行三维建模是一项有趣的任务。本文将介绍如何利用mxcad3d来创建三维管道模型。该工具提供了一系列三维建模功能的API,使得建立复杂的管道结构变得简单直观。安装在此之前,需要先安装...

网页模版如何用

网页模版已成为如今网站建设的核心工具。随着互联网需求的增长,越来越多的企业和组织需要建立自己的网站,以展示他们的品牌和服务。在这个过程中,网页模版为他们提供了一种简单而高效的方式来构建网站。所谓网页模...

AI嵌入式Flowcode编程网页开发人员入门指南

WebDeveloper允许使用FlowcodeIDE环境开发具有交互性的网页。可以在2D面板中添加特殊网页组件,以创建网页的视觉表示,并可以使用流程图添加交互功能。它的引入意味着Flowcod...

用Deepseek制作网页版的汉诺塔游戏保姆级教程

在deepseek中输入:“帮我做一个网页版的汉诺塔演示游戏,游戏包含2层、3层、4层、5层的汉诺塔游戏演示,制作自动求解演示按钮,点击按钮就可以生成出步数,同时自动演示最优解动画。”最后把生成的程序...

TaskBuilder前端页面CSS样式规则设置

在前端页面设计器内,点击底部的“CSS样式”选项卡,可以打开CSS样式设计器,在此查看和设计当前页面的CSS样式规则,如下图所示:3.3.6.1引入外部样式文件如果要在页面中引入外部CSS文件,可以点...

使用 Python、FastHTML 和 Uvicorn 构建简单的博客网站

FastHTML是2024年7月推出的PythonWeb框架,是一个简单但功能强大的框架,允许开发人员使用纯Python构建Web应用程序。(不需要复杂的模板引擎)。Fast...

用AI可以生成HTML网页了,很多初级前端都要失业了

即使你完全不懂html,javascript,css,也能做出漂亮的网页,这在以前是不可想象的,而现在确是可行的,因为有这样一个项目:openUI。openUI不仅仅能生成html页面,还能生成自适应...

python原始套接字socket下载http网页文件到txt

python原始套接字socket下载http网页文件到txtimportsocketdefdownload_webpage(url,output_file):try:...

高效排版:实现DeepSeek生成内容Word格式排版并导...

高效排版:实现DeepSeek生成内容Word格式排版并导出的经典方法,步骤简洁高效:DeepSeek生成内容复制出来容易出现乱码,下面介绍一种比较高效简单的方法!一、核心三步法1.调整模型模式在D...

打工人福音!3分钟教你学会word精美排版

昨天大熊介绍了word一键排版的三种办法,今天我们来详细讲讲第二种办法,用html代码实现一键排版,然后再导出pdf实现精美效果。打工人,打工魂,你是不是也有以下烦恼?下面是我经过多次和Deepsee...

使用 HTML 创建可折叠的交互式组件,一行 JS 代...

如果你想创建一个可折叠的交互式组件,使用<details>元素即可,一行JavaScript也不用写。<details>组件定义了一个可折叠的容器,它的第一个元素必须...

新手小白1分钟学会Word——文档的编辑1.1

天空一声巨响,迷人的我闪亮登场,亲爱的家人们,周末好呀!话不多说,咱们继续开干!昨天说到本节还有个小尾巴,那咱们就把这个小尾巴了结了,然后开始新篇章~四、保存文档我们对文档编辑完之后最重要的一步就...

超强!DeepSeek+HTML制作数据看板,老板看了都点赞

DeepSeek以极强的推理能力,支持生成各种代码,比如Python、SQL、Matlab、JS、HTML等,你可以拿这些代码放到编译器里,就能直接跑出结果,比如机器学习算法、exe应用、可视化图表、...

什么是Tailwind CSS

什么是TailwindCSSTailwindCSS是一个实用优先(Utility-First)的CSS框架,其核心思想是通过直接在HTML中组合预定义的类名来快速构建界面样式,无需编写传...