数据持久层的设计目标是为整个项目提供一个高层、统一、安全和并发的数据持久机制。数据持久层,是基于J2EE体系结构,并采用了Hibernate作为持久映射框架。

Hibernate有许多值得学习的当地,这儿咱们首要介绍在Hibernate中J2EE数据耐久层规划。

简略解析J2EE数据耐久层规划  数据持久层 Hibernate 第1张

数据耐久层的规划方针是为整个项目供给一个高层、一致、安全和并发的数据耐久机制。

完成对各种数据进行耐久化的编程作业,并为体系事务逻辑层供给服务。数据耐久层供给了数据拜访办法,能够使其它程序员防止手艺编写程序拜访数据耐久层(Persistene layer),使其专心于事务逻辑的开发,而且能够在不同项目中重用映射结构,大大简化了数据增、删、改、查等功用的开发进程,一起又不损失多层结构的天然优势,承继连续J2EE特有的可伸缩性和可扩展性。

1 数据耐久层及ORM映射结构

笔者从事的项目中的数据耐久层,是根据J2EE体系结构,并选用了Hibernate作为耐久映射结构。

Hibernate是一种新的ORM映射东西,是JDBC的轻量级的方针封装。Hibernate能够用在JDBC能够运用的任何场合,例如Java运用程序的数据库拜访代码,DAO接口的完成类,乃至能够是BMP里边的拜访数据库的代码。Hibernate不只供给了从Java类到数据表之间的映射,也供给了数据查询和康复机制。相关于运用JDBC和SQL来手艺操作数据库,运用Hibernate,能够大大削减操作数据库的作业量。

Hibernate是一个和JDBC亲近相关的、独立的方针耐久层结构,能够调配各种App Server、Web Server、EJB Container一起运用,Hibernate的兼容性仅同JDBC驱动、底层数据库产品间有必定的联系,可是和运用它的Java程序、App Server没有任何联系,也不存在兼容性问题。而且现实标明Hibernate能够和多种Web服务器或许运用服务器杰出集成,现在现已支撑简直一切的盛行的数据库服务器(达16种)。

在较为常用的数据耐久层计划中,Hibernate无疑是最优异的,下面是对各种耐久计划的比较。

¨ 盛行的数据耐久层架构:

Business Layer <-> Session Bean <-> Entity Bean <-> DB

¨ 为了处理功用妨碍的代替架构:

Business Layer <-> DAO <-> JDBC <-> DB

¨ 运用Hibernate来进步上面架构的开发功率的架构:

Business Layer <-> DAO <-> Hibernate <-> DB

咱们就上面3个架构来作如下剖析。

(1)内存耗费:选用JDBC的架构无疑是最省内存的,Hibernate的架构次之,EB的架构最差。

(2)运转功率:假如JDBC的代码写的十分优化,那么JDBC架构运转功率最高,可是实践项目中,这一点简直做不到,这需求程序员十分通晓JDBC,运用Batch句子,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下选用成果集cache等等。而一般情况下程序员是做不到这一点的。因而Hibernate架构表现出最快的运转功率。EB的架构功率会差的很远。

(3)开发功率:在有Eclipse、JBuilder等开发东西的支撑下,关于简略的项目,EB架构开发功率最高,JDBC次之,Hibernate最差。可是在大的项目,特别是耐久层联系映射很杂乱的情况下,Hibernate功率高的惊人,JDBC次之,而EB架构很或许会失利。

2 数据耐久层规划

杂乱性是运用开发进程中最令人头疼的一个问题。每当在一个运用中增加一个功用时,它的杂乱性一般呈几何级的增加。这种杂乱性往往导致程序的开发无法再继续下去。这也是现在为什么许多运用只要Beta版别而没有正式版的原因。

专家将运用开发进程发生的杂乱性分为两类,即非实质的(accidental)和实质的(essential)。实质的杂乱性是关于处理方针问题所必定发生的杂乱性,非实质的杂乱性是因为挑选了不适当的开发东西和规划东西而发生的杂乱性。关于一个功用确认的程序来讲,实质的杂乱性是确认的,而非实质的杂乱性则是没有约束的。因而,一个运用的开发要想较顺畅地取得成功,就需求尽或许地削减非实质的杂乱性。

规划形式使人们能够愈加简略方便地复用成功的规划和体系结构。将已证明的技能表述成规划形式,也会使新体系开发者愈加简略了解其规划思路。

衡量一个体系优异与否的关键因素,除了能够满意用户需求外还有如下方面:首要是灵敏性。灵敏性意指这种结构或形式不依赖于任何实践运用,应该与操作体系、运用程序无关。供给独立的结构,能够供给最大的重用。其次是可扩展性。跟着事务的扩展,新的事务不断增加,事务逻辑天然增加,体系必定会进行修正或增加相应功用模块。再次是可装备性。最终是安全性。

数据耐久层的规划选用了多种规划形式,最大极限的下降了体系内部各模块、子体系间的耦合性,使得体系相对易于扩展,而且能够在进行改动时,确保耐久层的事务逻辑层相对安稳,根本不需求因耐久层的调整改动而进行逻辑层的改变。

笔者在项目中选用了如下规划形式。

1)全体架构——MVC形式(模型-视图-操控器)

模型(Model):模型包括完成任务所需求的一切的行为和数据。在数据耐久层中,模型即为值方针以及数据拜访方针。

视图(View):数据耐久层中,视图便是耐久层同其它层进行数据交流的值方针(Transfer Object)和视图帮手方针。

¨ 操控器(Controller):耐久层所需的操控相对简略,因而集成到了操控署理中。

耐久层全体选用MVC形式,使得整个数据耐久层的完成部分与项目的事务逻辑部分阻隔开来,能够完成对接口作大的修正而不需求对相应的模型进行修正。别的,耐久层某子体系发生改变时,不会影响到其它子体系。有利于进步体系的安稳性、可维护性。

2)值方针形式(Value Object Pattern)

值方针用来封装事务方针。相应的办法调用是设置(getter)和检索(setter)值方针。它是恣意的可串行化的Java方针,当客户端Bean恳求事务数据时,该Bean能够结构值方针,用特点值来填充,并依照值把它传递给客户端。

在笔者开发项目的数据耐久层体系结构中,值方针首要运用在子体系间传递、交流数据(Transfer Object)和映射数据表两个方面(Persistent Object)。

在各子体系间进行数据传递和数据交流时,运用值方针形式能够最大化地下降体系间数据传递的开支。在这种战略下传递的是方针而不再是一个个的有意义的数据,使得体系在进行扩大、修正时,各子体系间数据传递部分不会遭到影响,因为各子体系仅需求关怀是否有值方针被传递,而并不去关怀传递的究竟是什么数据。

在映射数据库表时,值方针类及其子类所构成的树形结构被用来映射一个数据库表,该承继树经过XML装备文件对应数据库中的单个表,这使得最底层的联系型的数据库表结构能够面向方针模型所躲藏,别的,因为面向方针规划办法中类的可承继性,选用承继树对应一个表的战略使得该映射战略极易扩展,而且能够将一个杂乱的数据表转化成若干简略的值方针来表明,进步了体系的可维护性和可修正性。

3)数据拜访方针(DAO)

根据数据源不同,数据拜访也不同。根据存储的类型(联系数据库、面向方针数据库等)和供货商不同,耐久性存储(比方数据库)的拜访不同也很大。当事务组件或表明组件需求拜访某数据源时,它们能够运用适宜的API来取得衔接性,以及操作该数据源。可是在这些组件中包括衔接性和数据拜访代码会引进这些组件及数据源完成之间的严密耦合。组件中这类代码依赖性使运用程序从某种数据源迁移到其它品种的数据源将变得十分费事和困难,当数据源改变时,组件也需求改动,以便于能够处理新类型的数据源。

笔者开发项目的数据耐久层运用数据拜访方针(DAO)来笼统和封装一切对数据源的拜访。DAO办理着与数据源的衔接以便于检索和存储数据,DAO完成了用来操作数据源的拜访机制,内部封装了对Hibenernate数据操作、事务处理、会话办理等API的封装。外界依赖于DAO的事务组件为其客户端运用DAO供给了更简略的接口,DAO完全向客户端躲藏了数据源完成细节。因为当低层数据源完成改变时,DAO向客户端供给的接口不会改变,选用该规划形式答应DAO调整到不同的存储形式,而不会影响其客户端或事务组件,即便将来不再选用Hibernate作为联系映射结构,上层客户端也不会遭到任何影响。别的,DAO还充任组件和数据源之间的适配器的人物。

数据耐久层经过调整笼统工厂(Abstract Factory)形式和工厂办法(Factory Method) 形式(这二个创立型形式的完成概况拜见GoF的<规划形式>),),使DAO形式达到了很高的灵敏度。

当底层存储跟着完成的改变而改变时,该战略能够经过运用笼统工厂形式完成。笼统工厂能够根据工厂办法完成而创立,并可运用工厂办法完成。该战略供给一个DAO的笼统工厂方针,其间该方针能够结构多品种型的详细的DAO工厂,每个工厂支撑一种不同类型的耐久性存储完成。一旦你获取某特定完成的详细DAO工厂,能够运用它来生成该完成中所支撑和完成的DAO。

4)衔接池、运用级缓存及享元形式(进步体系功用)

¨ 缓存(Cache)

关于数据库来说,厂商的做法往往是在内存中拓荒相应的区域来存储或许被屡次存取的 数据和或许被屡次履行的句子,以使这些数据在下次被拜访时不用再次提交对DBMS的恳求和那些句子在下次履行时不用再次编译。

相同,数据耐久层选用缓存技能来保存现已从数据库中检索出来的部分常用数据。客户端拜访耐久层时,耐久层将首要拜访缓存,假如能够射中则直接从缓存中提取数据,不然再向数据库发送提取数据的指令。这种规划能够大幅度地进步数据拜访速度。

衔接池(Connection Pool)

池是一个很遍及的概念,和缓冲存储有机制附近的当地,都是缩减了拜访的环节,但它更注重于资源的同享。

关于拜访数据库来说,树立衔接的价值比较贵重,因而,数据耐久层树立了“衔接池”以进步拜访的功用。数据耐久层把衔接当作方针,整个体系启动后,衔接池首要树立若干衔接,拜访原本需求与数据库衔接的区域,都改为和池相连,池暂时分配衔接供拜访运用,成果回来后,拜访将衔接交还。这种规划消除了JDBC与数据源树立衔接的延时,一起在运用级供给了对数据源的并发拜访。

享元形式(Flyweight)

面向方针言语的准则便是一切都是方针,可是假如真实运用起来,有时方针数或许显得很巨大,比方,数据库中的记载,假如以每条记载作为一个方针,提取几千条记载,方针数便是几千,这无疑适当耗费内存。数据耐久层根据享元形式规划了若干元类,封装能够被同享的类。这种规划战略明显下降了体系的内存耗费。

5)各种方针的创立形式—工厂办法(Factory Method)

工厂办法形式将创立实例的作业与运用实例的作业分隔,也便是说,让创立实例所需求的很多初始化作业从简略的结构函数中别离出去。只需求调用一个一致的办法,即可根据需求创立出各种方针的实例,方针的创立办法不再用编码到程序模块中,而是一致编写在工厂类中。这样在体系进行扩大修正时,体系的改变仅存在于工厂类内部,而绝对不会对其他方针形成影响。

【修改引荐】

  1. Hibernate saveOrUpdate剖析
  2. Hibernate特点简略剖析
  3. Struts-Spring-Hibernate事例
  4. 简述Hibernate装备衔接池
  5. 说明Hibernate的作业原理实例
转载请说明出处
知优网 » 简略解析J2EE数据耐久层规划

发表评论

您需要后才能发表评论