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

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

ccwgpt 2025-02-21 12:27 23 浏览 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.

相关推荐

机器学习框架TensorFlow入门(tensorflow框架详解)

ensorFlow是一个广泛使用的开源机器学习框架,由GoogleBrain团队开发。它支持广泛的机器学习和深度学习任务,并且可以在CPU和GPU上运行。下面是一个使用TensorF...

合肥高新区企业本源发布量子机器学习框架VQNet 开辟量子机器学习的新领域

近日,高新区企业合肥本源量子计算科技有限责任公司通过研究混合实现变分量子算法和经典机器学习框架的可能性,全新开发了量子机器学习框架VQNet,可满足构建所有类型的量子机器学习算法,实现量子-经典混合任...

如何使用 TensorFlow 构建机器学习模型

在这篇文章中,我将逐步讲解如何使用TensorFlow创建一个简单的机器学习模型。TensorFlow是一个由谷歌开发的库,并在2015年开源,它能使构建和训练机器学习模型变得简单。我们接下...

机器学习框架底层揭秘:PyTorch、TensorFlow 如何高效“跑模型”

在使用PyTorch或TensorFlow时,你是否想过:这些深度学习框架底层到底是怎么运行的?为什么我们一行.backward()就能自动计算梯度?本篇将用最简单的语言,拆解几个关键概念...

2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?

这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...

基于SpringBoot 的CMS系统,拿去开发企业官网真香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【网络安全】关于Apache Shiro权限绕过高危漏洞的 预警通报

近日,国家信息安全漏洞共享平台(CNVD)公布了深信服终端检测平台(EDR)远程命令执行高危漏洞,攻击者利用该漏洞可远程执行系统命令,获得目标服务器的权限。一、漏洞情况ApacheShiro是一个强...

开发企业官网就用这个基于SpringBoot的CMS系统,真香

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服。开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。...

这款基于SpringBoot 的CMS系统,开发企业官网确实香(附源码)

前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...

【推荐】一款基于BPM和代码生成器的 AI 低代码开源平台

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍JeecgBoot是一款基于BPM和代码生成器的AI低代码平台,专为Java企业级Web应用而生。它采...

云安全日报200819:Apache发现重要漏洞 可窃取信息 控制系统 需要尽快升级

ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软...

基于jeecgboot框架的cloud商城源码分享,兼容单体和微服务模式

3年时间里,随着关注java单商户商城系统的朋友越来越多,对cloud版本的商城呼声也越来越高。因此今年立项了cloud版本的开发,目前已发gitee开源,目前也基本测试完毕,欢迎大家体验以及提出宝贵...

SpringBoot + Mybatis + Shiro + mysql + redis智能平台源码分享

后端技术栈基于SpringBoot+Mybatis+Shiro+mysql+redis构建的智慧云智能教育平台基于数据驱动视图的理念封装element-ui,即使没有vue的使...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板-基础框架-分布式架构-开源项目-持续集成-自动化部署-系统监测-无缝升级的全方位J2EE企业级开发解...

取消回复欢迎 发表评论: