您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页对象持久化技术Hibemate的应用研究

对象持久化技术Hibemate的应用研究

来源:筏尚旅游网
维普资讯 http://www.cqvip.com 124 福建电脑 2008年第3期 对象持久化技术Hibemate的应用研究 , 苏艳 , 许南山1 (1.北京化工大学信息科学与技术学院北京100029 2.北京石油化工学院经济管理学院北京102617) 【摘要】:本文介绍了对象持久化技术Hibernate及其体系结构,并通过一个用户权限管理的设计和实现过程。说明了 应用Hibernate技术的关键步骤及方法。 【关键宇】:Hibemate;对象/g:系映射;对象持久化;DAO 1.引言 目前的企业级应用开发环境中.面向对象是主流的开发方 法。对象只能存在于内存中,而内存不能永久保存数据,若需永 久保存对象的状态。需要进行对象的持久化,即将对象保存到可 永久保存的存储介质和设备中.目前最主要的存储介质和设备 仍为关系数据库。关系数据库中存放的是关系数据,是非面向对 象的。对象和关系数据其实是业务实体的两种表现形式,业务实 体在内存中表现为对象,在数据库中表现为关系数据。将业务对 象持久化到关系数据库中时一般都基于JDBC拼写SOL语句实 现,而SQL是结构化查询语言。这就造成了”对象一关系的阻抗 适配”。随着设计思想的演化。出现了很多对象,关系型数据映射 ORM(Object/Relation Mapping),如Hibernate,从而将开发者从 JDBC和SQL出来。使用Hibernate,开发者可以采用面向对 象的方法操作数据库,提高工作效率。 2.对象持久化技术Hibemate 2.1 Hibernate介绍 Application Hibernate是一个开源的 ORM框架.是现在最流行的轻量 级持久化框架之一。它将JDBC进 PersistentObjects}== 行了轻量级的对象封装.使得开 Hibernate 发人员可以方便地使用对象编程 的思想来操纵数据库。利用Hi PHriobeDrenrtaitees j  xML Mapping Ibemate。开发者可以按照所有Ja. va的基础语义(包括关联、继承、 多态、组合以及Collection架构) 图1 Hibemate结构 进行持久层开发。只要写好相关配置文件。就可以以面向对象的 方式操作数据库,大幅度减少手工编码操作JDBC和sQL的时 间。Hibernate支持所有主流商业数据库和开源数据库。另外 Hibernate支持多种缓存机制.可大大提高系统数据操作的效 率。所以现在越来越多的Java开发人员把Hibernate作为企业应 用和关系数据库之间的中间件.以节省和对象持久化有关的 30%的JDBC编程工作量。 2.2 Hibernate体系结构 从图l中可以看到Hibemate使用数据库和配置信息来为 应用程序提供持久化服务。 3.Hibernate的应用 下面结合在用户权限管理数据持久层的实现过程介绍Hi bemate的应用方法。在应用级的用户权限管理方面,基于角色 的授权模型应用广泛。该模 型如图2所示(因篇幅关系. 仅列出必要属性): 在该模型中.一个用户 属于一个部门:一个用户可 被授予多种角色:一个角色 可授予多个用户:一个角色 可具有对多个系统功能的操 作权限:一个功能可由多个 角色操作。用户通过身份验 图2类图 证登录系统时.将用户所属角色列表及其对应的系统功能保存 起来。从而可以很方便地检查该用户是否具有对某系统功能的 操作权限。 关系数据库中的表结构如表l所示: 表名 属性(带下划线的羁性为主键) 外键 S user userNmme.dept dept Dept debtId.deptName Role roleId,roleName runctIon functlonId,functlonName,10catlon UserRole userName.roleId userName,roleId RolePunction roleId,tunction1d roleld, functlonId 表1数据库表结构 3.1创建配置文件 Hibernate可以使用XML或属性文件进行配置.配置文件 默认为hibenrate.c .xml( ̄hibernate.properties)。配置文件中 必要的几部分包括: 3.1.1.数据库连接配置:设置连接所用的驱动名称.连接字 符串以及连接数据库时所用的用户及密码。 <property name=“hibernate.connection.driver_class”>oracle. idbc.driver.OracleDriver<Jpmoerty> <property name=”hibernate.connection.u ̄rnanle“>suyan<, property> <property nalne=“hibernate.connection.password”>suyan<, property> <property nalne=”hibernate.connection.url“>jdbc:oracle:thin: @127.0.0.1:1521:logis</property> 3.1.2.sQL方言的选择:不同的数据库对sQL的支持和优 化有一些差别,通过设置sOL方言,可以更好更高效地适应不 同的数据库。 <property nalne=”dialect”>org.hibernate.dialect.OracleDi— alect</property> . 3.1-3.映射资源:需要给出完整的包名和文件名。如: ’ <mapping resotlrce=”sy/hibemate/User.hbm.xml”/> 3.2.创建持久化类 此例中我们需建立四个持久化类.每个类中包括属性以及 相应的get和set方法.该持久化类就是一个普通的JavaBean风 格的类。它不需要实现任何Hibernate相关的接153,可以像普通 Jaya类一样使用。这就是常说的“非侵人性”。也是Hibenrate相 比EJB等持久化机制的优点之一。以用户类为例,相应的持久化 类中。定义相关属性: private String userName;||甩户名 private Dept dept;,,所属部门 private Set role8=new HashSet(0);,,定义集合.角色 另外还需定义这三个属性的getxxx方法和 ̄1.xxx方法。 3.3.创建映射文件 每个持久化类均有一个对象,关系映射文件.以User.hbm. xml为例说明如下: <class name=%y.hibemate.User"table=’’S._user"> <id name=”u∞rName”oo|umn= userName”> <generatar class=”assigned’’,> 维普资讯 http://www.cqvip.com

2008年第3期 <rid> 福建 电脑 125 <many-to-one namo ̄“dept”class=”sy.hibernate.Dept”lazy=”false”) <column name=”dept”></column> /many-t<o-one> 在本例中查询的信息取自系统中的六张表.若直接使用 JDBC进行操作。需手工拼写复杂的SQL语句.但使用Hiber- nate.User相关信息的查询以及与对象的关联是由Hibemate根 据配置文件自动完成的。 3,5使用DAO设计模式 在企业级应用中.一般将业务逻辑分为服务层逻辑和持久 <set namo=”roles”table=”UserRole”lzy=”faale”isnvere=”fsalse”) <key column=”userName”,) <many-to-many class=“sy.hibernate.Role”column=“roleld“,) /s<et> /cl<ssa> 化层逻辑。在实现业务层逻辑时.需要尽可能保持层次之间的松 在此映射文件中.描述了持久化类User与表S user的对应 散耦合。持久化层逻辑可采用Hibemate作为中间件.并使用 关系。其中,id对应表中的主键,并且定义了主键的生成方式。此 DAO设计模式实现。DAO模式是J2EE核心模式中的一种.主要 外.还定义了User与Dept的多对一映射。以及与角色的多对多 是在业务核心方法和具体数据源之问增加一层.从而减少了两 映射 者的耦合 3.4持久化操作 Hibernate的核心接口一共有5个.分别为Session、Session. 在具体应用中可将每个持久化类对应一个DAO.它实现了 持久化类的创建、查询、更新及删除方法.以及其他访问持久化 Factory、Conifguration、Transaction和Query。通过这些接口.可以 机制的方法,在相应的DAO实现中,调用Hibemate API访问持 对持久化对象进行存取。并可进行事务控制。Hibemate支持多 久层。这样只有特定于Hibernate的DAO实现需要依赖Hiber- 种检索方式,如HQL,QBC,QBE等,而Hibernate查询语言 nate API,当改用其他的持久化机制或持久化中间件时.只需创 (HQL,Hibernate Query Language)是一种面向对象的查询语言, 建新的DAO实现,无需更改应用中其他业务逻辑代码。 它功能强大且简单易学。是使用最多的检索方式。 例如在上述应用中.对于用户类User应定义一个UserDAO 下面以查询用户名为SS的用户信息为例.说明Hibemate 类,在该类中,包含获得用户列表、通过用户名获取单个用户信 的持久化操作。 息、根据用户名删除用户、更新用户信息、保存用户信息等通用 3.4,1,连接数据库.可通过如下语句完成: 操作。 SessionFactory 8f=new Configuraiton 0.configure 0.buildSes— 4.结束语 sionFactory0; 利用Hibernate对象持久化技术.可以有效地进行对象,关 Session session=sf.openSession0; 系映射,满足企业管理系统中的对象持久化要求.简化对数据库 3.4.2.利用HQL进行查询 数据的操作过程.使开发者可以集中精力于业务对象的建模和 Query query=session.createQuery"from User as u where u, 业务逻辑的开发,并可利用Hibernate提供的缓存策略和并发机 userName=:uname”); 制,提高系统的性能 ,/创建一个Query对象 query.setStrlng(”uname”。”SS”):,,动态绑定参数 参考文献: 。 List list=query.1istO;,,执行查询语句 返回查询结果 1.计磊等蝙著.精通J2EE一一Echpse,Struts,Hibernate,Spring整合应用案例 3.4.3.对于当前处理的用户user可通过user.getDept0.get. 人民邮电出版社。2006年。 DeptNameO输出该用户所属的部门名称.而user.getRolesO返回 2.扬飞等.Hibernate框架在权限管理系统中的应用.微电子学与计算机 了该用户所属的角色信息.通过每一个角色的getFunctions0方 2007,2:P206-208。 法可返回该角色的权限信息。 3.孙卫琴蝙著.精通Hibemate一-java对象持久化技术详解.电子工业出 版社。2005年。 (上接第121页) 2.7火灾报警系统电源设计: 气体判断子程序、现场采集情况判断子程序、处理、报警判断子 该模块用于向硬件系统中的各个数字器件(如89C51、 程序、INTo中断子程序、1、0(水 GM16C550、ADC0809等)和模拟器件(运算放大器LM741)提供 压报警)中断子程序、报警程 工作电源。 序。 工作原理:市电电源220V输入.通过一个双18V的变压器 3.结束 输出交流36V电压.再经过桥堆的桥氏整流及一个2200uF的 研制的用于小型防火建筑 大电容滤波后,桥堆的1、3两端各得到正、负的直流18V电压 的消防报警系统.利用程控电 (但仍包含有一定的纹波系数).正、负18V的电压分别加到两个 话网作传输媒体.报警具有自 三端稳压器件7815、7915的输入端.通过稳压输出得到稳定的 动快速、准确可靠的特点.且其 正、负15V电压。为得到数字器件工作所需的工作电压,从7815 成本低.家庭及办公室使用安 的输入端拉出引线,加到7805的输入端.同样通过稳压得到稳 全方便.有广泛的应用前景 现 定的直流正5V电压。为减少市电的电网噪声对电源的影响.在 场模拟实验表明.本系统安全 三个稳压器件的输入和输出端各加一个0.33u和一个0.1u的瓷 可靠,误报率低。且由于其体积 介电容,以滤除电网噪声、高频噪声,增强整个电源的抗干扰能 小、操作维护方便、成本低廉 力。同时为进一步改善输出电压的纹波系数.在三个稳压器件的 等,具有广阔的应用前景。 图4消防报警系统 输出端各再加一个470u的滤波电容。在实际制作中,由于三个 监控程序流程图 稳压器件的两端存在着几伏的压降,因此应该在7805、7815、 参考文献: 7915背后各加一散热片.有利于它们更好的工作.也更安全。 1.王福瑞.单片微机测控系统设计大全【MI.北京:北京航空航天大学出版 2.消防报警系统监控程序设计 社.2001. 消防报警系统监控程序流程图如图4所示。系统复位后.首 2.李华.MCS-51系列单片机实用接口技术【M1.北京:北京航空航天大学 先要进行初始化,包括对各个控制用寄存器的初始化、设置中断 出版社.1999. 服务程序的入121地址、设置堆栈等。包括:报警器监控程序设计、 3.何立民.单片机应用技术选编【M1.北京:北京航空航天大学出版社, 数据采集子程序、火灾判断与报警程序、以及温度判断子程序、 1999 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务