J ava的DA E引擎研究

 J ava的DA E引擎研究
陈丹桂
(湖南涉外经济学院计算机学部,湖南长沙410205)
0 引言
Java中最常用的数据访问方式是JDBC。JDBC可以说是
访问持久数据最原始、最直接的方法。JDBC是SIJN公司提供
的、用来执行SQL(Structured Query Language)语句的Java应
用程序接口。JDBC定义了Java与数据库之间的接口类库
(Java.sql包),它是Java语言中执行SQL语句的API,由一系列
类和接口所组成。这些类和接口均是由Java语言写成的。程
序开发者可以通过JDBC在Java语言中建立与数据库的链接,
执行SQL语句和处理SQL语句返回的结果。它易于向任何关
系数据库发送SQL语句,支持对多种数据库的访问。运用
JDBC API,只需写出单独一个程序就能够发送JDBCAPI给相
应的数据库,如Sybase,Oracle或Infomix等。Java语言的中性
结构和JDBC的开放性使得程序员只需写一次程序就能让它
到处运行。
1 Java目前的几种数据访问技术
JavaDataObjeets(JDOJava数据对象)是在Java Conununity
Proeess领导之下开发的一个存储对象新规范(JDO].0版于
2002年3月发布),规范的两个主要目的是提供数据处理和访问
机制的API以及允许规范的实现作为应用服务器的一部分。
JDO中独到的核心思想是在尽可能不增加程序员额外工
作的情况下提供一个面向Java的数据库存储机制u 。程序员不
需要学习SQL,也不需要很麻烦地通过JDBC调用将数据从
Java对象中复制到数据库或从中读出,他们只需要按自然的想
法使用Java类、属性和对象之间的引用,而不用写与之无关的
大量代码,那代码会使人头晕脑胀。甚至对于查询来说,程序
员也可以用Java的布尔表达式(判断比较表达式)来代替SQL。
换句话说,程序员只需写Java代码,而存储都是自动实现的。
Hibernate是一种比较彻底的Java对象映射工具,支持所有
的使用各种Java思想如inheritance,association,composition,
collections等实现的对象 。它可以直接映射大部分JavaBean
而不需要对它们作任何修改,即使修改最多也就是在Bean里面
加上一些私有访问方法;可以将一个用户定义的多个类的实例
映射到一张表的同一行;还可以利用代理模式来简化载入类的
过程。这将大大减少利用HibenateSQL从数据库提取数据的代
码的编写量,从而节约开发时间和开发成本。每一种持久化机
制都有一种对持久化对象属性的访问机制。
EJB Entitybean.(Em)EJB作为Sun J2EE体系的核心部分,
是Sun企业级开发的首选。J2EE定义了下面的组件:
(1)applicationclient即applets是客户层组件;
(2)javaServlet和JSP组件是Web层组件;
(3)Enterprise JavaBean(EJB)组件是业务处理层组件。
EJB技术是J2EE体系的一部分,EJB组件是用Java语言编
写的,是可以被户端程序存取的可重用的服务器端组件,它运
行在J2EE服务器上,在客户服务器系统中,EJB提供类似于中
问件的服务。
在EJB技术中,一般有两种实现持久层的方案,一种是
Bean管理持久BMP(Bean Management persistence),另一种是
容器管理持久性CMP(Container Management Persistence)。
2 DAE(DatabaseAeeessEngine)的架构和原理
应用系统的复杂性决定了在开发过程中,根据用户需要数
据库的表要不断地修改,加上开发时的人为因素,导致系统的
需要不断地修改和更新。为了避免以上问题的出现,我们开发
了一套新的基于Java的数据库访问技术(DAE)。
2.1 DAE的设计思想
三层结构即表述层、业务逻辑层和数据库层 ,是目前典型
的应用软件结构。其中表述层提供与用户的交互界面,GUI和Web页面是表述层的两个典型的例子;业务逻辑层实现各种业
务逻辑;数据库层负责存放和管理应用的持久性数据。在上述的
三层结构中,业务逻辑层不仅负责业务逻辑,而且直接访问数据
库,提供对业务数据的保存、更新、删除和查询操作。如果数据
库改变或数据库的表结构发生变化,对业务逻辑层的影响非常
大。为了把数据访问细节与业务逻辑分开,可以把数据访问作
为单独的持久化层。持久化层封装了数据访问细节 ,为业务逻
辑层提供了面向对象的API。完善的持久化层应达到以下目标:
(1)代码可重用性高,能够完成所有的数据库访问操作;
(2)能够支持多种数据库平台;
(3)具有相对独立性,当持久化层发生变化时,不会影响上
层的实现。
DAE提供了Java平台上透明的对象存储技术。DAE中独
到的核心思想是在尽可能不增加程序员额外工作的情况下提
供一个面向Java对象的数据库存储机制,因此对开发人员来
说,只需要按自然的想法使用Java类、属性和对象之间的引用,
存储数据对象完全不需要额外的代码(如JDBCAPI的使用),这
些繁琐的例行工作己经转移到DAE产品上,开发人员可以解脱
出来,集中时间和精力在业务逻辑上。所以DAE使开发简单
化,提高了开发效率和可靠性。
2.2 DAE架构
DAE(Database Aeeess Engine)数据库访问引擎,是作为一
种持久化技术开发的,它在实现中封装了关系数据模型和数据
访问细节,即以JDBC为Java访问数据库的基石,封装了SQL操
作,提供了更为上层更为强大的接口 。通过调用DAEAPI,操
作数据库(BasedonJDBC),不需要了解JDBC,不需要书写SQL
语句。DAE的工作原理是通过文件在值对象和数据库表之间建
立起一个映射关系(O/R Mapping),这样,只需要通过操作这些
值对象和DAE提供的一些基本类,就可以达到使用数据库的目
的。DAE对JDBC进行了轻量级的对象封装。使Java程序员可
以方便地使用对象编程思维来操纵数据库,不用为跨数据库修
改代码,不必为数据库设计的改变而修改后台程序,提高代码的
复用度,同时减少大量的维护工作。相对于直接使用SQL语句
来手工操作数据库,DAE可以大大减少操作数据库的工作量。
利用DAE,程序员访问数据库所需要做的只是为持久化对
象编制XML映射文件,简单地更改初始化配置文件(DBmode.
xml文件)。当然,DAE还是保留了SQL接口,同样可以使用
JDBC和SQL访问数据库。DAE的应用模型框架如图l所示.

2.3 DAE的原理
在调用数据库访问引擎之前,需要生成数据库模型的
XML描述信息,可以手工编辑生成或工具自动生成。生成
xML描述信息后,需要组织成模型描述的XML文件和对应的
Java类。DAE为了方便用户使用,也提供了自动的数据库模型
描述生成工具DbModelTool。生成数据库模型描述后,数据库
访问引擎按以下的步骤来访问数据库。
第一步,根据需要操作的数据库表,视图,调用DBT(数据库
表描述包)模块,动态生成映射RDO对象(映射表记录的数据
对象),DBT根据请求,去调用MGR(数据库模型管理)模块,获
取所请求的表或视图的XML描述信息,得到XML描述信息
后,DBT动态生成映射表或视图的RDO对象。
第二步,根据生成的RDO对象以及数据库操作的类型
(增加/删除,),设置RDO对象相应的值,再根据操作条件(查
询条件/排序⋯),调用(SQL语句生成)模块,生成对应的SQL
语句。
第三步,根据生成的SQL语句,调用DBA(数据库访问)
模块。
第四步,处理调用DBA后,返回结果数据对象。
3 DAE的对象/关系映射
以下通过对testDAE表格操作的实例来说明利用DAE框
架的开发过程。数据库例表结构如图2所示。

 

首先要跟据用户的需要编写配置文件,配置文件是一个
XML文档。
在CATest\OpenAny\ConfigkDAE目录下创建名为DAE.
XML文件,并且将它的路径添加到应用的类路径中就可以完
成DAE的配置。该配置文件由DAE用来连接到数据库,生成
模式和获得其它特定数据库信息的属性组成。要将底层数据
库内的变动映射到整个系统,只需要修改该文件内的属性值。
该配置文件的基本结构如下。

  1. <?xmlversion=“1.0”encoding=”UTF一8”?>
  2. <!一saVeDAEcO g一>
  3. <DAE>
  4. <DAOMgr>
  5. <DriverNa-me>oraele.jdbe.driver.OracleDriver</DriverName>
  6. <Url>jdbe:oracle:thin:@127.0.0 1:1521:xe</url>
  7. <User>dae<,User>
  8. <Password>dae</Password>
  9. <lnitConn>3<lnitConn>
  10. <MaxConn>5</MaxConn>
  11. <lswait>true</Iswait>
  12. <DAOMgr>
  13. <DbCodeMgr>
  14. <JavaToDb>
  15. <JavaToDb>
  16. //JavaToDbjava指应用系统编码转换成数据库编码的规则:
  17. . <DbTojava>
  18. <DbTojava>
  19. //DbTojava是指数据库编码转换成java系统编码的规则:
  20. <PageMgr>
  21. </PageMgr>
  22. //PageMgr~管理各种不同数据库的分页适配驱动。
  23. <DAE>
复制代码

配置文件中DriverName属性指的是JDBC驱动类oracle.
jdbc.driver.oracleDriver;Url是指JDBC数据库连接字符串jdbc:
oracle:thin:@127@0.1:1521:xe;User属性指定了用于连接数据
库的用户名是dae;Password属性指定了用于连接数据库的密
码是pass;这四项配置,在连接数据的时候都会要使用到。而
InitConn表示数据库连接池的最小连接数为3;MaxConn表示
数据库连接池的最大连接数为5;Iswait当超过连接池的最大
连接数时是否等待;这三项设置在进行数据库连接的时候也
都要用到。
JavaToDbjava指应用系统编码转换成数据库编码的规则;
DbTojava是指数据库编码转换成java系统编码的规则;
PageMgr是管理各种不同数据库的分页适配驱动。
在上面的省略号位置,我们加入了详细的系统编码与数据
库编码相互转换的规则以及管理不同数据库的分页适配驱动,
以便我们生成各种代码。
4使用DAE的接口进行数据访问
DAE提供的DBmodelTool工具可以根据指定数据库文件
生成XML描述文件。但是这只是一个方面,重要的是要给用
户提供一个便于调用后台持久层对象的接口(即访问数据库的
接口)。这里就详细介绍利用DAE生成的用户接口如何来访问
数据库,这是本文的重点。
我们以TEXTDAE表为例来进行介绍。实现环境:DAE、
操作系统为WindowsXP、数据库为Oreale。首先配置数据库:
包括用户名、密码、URL、作为驱动器的类名、链接池等。

  1. DRIVER:oraele.jdbe.driver.oraeleDriver
  2. URL:jdbe:oracle:thin:@127.0.0.1:1521:XE
  3. Usename:dae
  4. Password:dae
  5. 进入系统后,以增加记录为例。
  6. PrivatevoidtestAdd()
  7. {DAOdao=null;/,定义DAO
  8. try
  9. dao=DAoMgr.getDAO0;114~ ]了工厂模式
  10. TestDAEtestDAE=newTestDAE0:
  11. testDAE.setColValue(”NO”,”n:
  12. testDAE.SetColValue(”NAME”,”IGB内存条”);
  13. testDAE.setCol、ralue(”PRICE”,”525.80”):
  14. testDAE.setColValue(”TYPE⋯ ””):
  15. 生成SQL语句
  16. insertint0testDAE(NO,NAME,PRICE,TYPE)values(1,“1 GB
  17. 内存条”
  18. 525.50,“电脑配件”)
  19. ||
  20. Stringsql=BuildSQL.buildAddSQL(testDAE);
  21. dao.execuIeAdd(sq1):
  22. DAOMgr.freeDAO(dao):
  23. catch
  24. eateh(TlirowabIeex)
  25. if(dao!=nul1)
  26. (DAOMgr.freeDAO(dao)
  27. )
  28. ex.printstackTraee0;
  29. }
复制代码

这段代码的功能是增加一条记录到数据库,它比一般的
SQL代码要简单得多。
5 DAE的技术优势
通过以上访问数据库的实例可发现,使用DAE数据库访问
引擎工具与传统的访问技术相比较具有以下优势:
(1)提供的DBmodelTool 5]]具,使得XML描述文件的生成
快捷方便,减小了出错机率,提高了开发效率。
(2)开发人员无需学习JDBC和SQL,只要懂得DAE几个
简单的API,就可以实现对数据库的全部操作。DAE保留了
SQL的操作接口,程序员不需要去熟悉新的工具。Hibernate
工具将底层数据库和JDBCAPI彻底封装,对上层应用只暴露
HibernateAPI。
(3)使用XML来描述数据库对象模型,通过描述数据库的
XML与表形成动态映射,由运行时(Runtime)的Java对象去实
现映射功能;实现了数据库模型与代码分开,数据库发生了变
化,只需要修改相应的数据库模型描述,这是传统访问技术不
具有的优势。
6结束语
利用DAE所生成的接口来访问testDAE表的方法,极大地
提高了数据库访问的效率,并增强了相应程序代码的复用性。

(本文来自 www.nba114.com 转载请注明)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值