基于hibernate的ORM持久化操作

来源 :电子世界 | 被引量 : 0次 | 上传用户:BlueHeart2010XP
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】hibernate框架用于提供一种持久化的对象-关系映射模型解决方案,为此,本文在hibernate框架的基础上对几种关联映射进行了研究,提出了一种基于hibernate关联映射模型,并将其应用到了信息系统的开发中,取得了通用性效果。
  【关键词】hibernate;持久化层;ORM模型;信息系统开发
  
   一、引言
   目前使用的数据库都是关系型数据库,而java本质上是一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据库操作,降低了编程的效率以及系统的可维护性。如何设计一个低耦合,高内聚并且具有良好的可维护性、可扩展性的系统一直是软件工程领域重点研究的问题,在java web应用开发中引入优秀的框架使之成为可能。[1]
   框架(Framework)是可重用的半完成的应用程序,可以用来产生专门的定制程序。[2]框架一般具有即插即用的可重用性,成熟的稳定性以及良好的团队协作性。[3]Hibernate技术框架本质上是一个提供数据库服务的中间件。[4]ORM也可以理解为一种规范,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系型数据库的映射。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。ORM框架是面向对象程序设计语言与关系数据库发展不同步时的中间解决方案。[5]
   二、hibernate简介
   Hibernate利用反射机制在运行时实现持久化一个对象的各种操作,保证了源码的简练和完全的面向对象风格。[1]Hibernate全局配置文件hibernatecfg.xml中描述数据库连接信息,注册系统所有的对象-关系映射文件(*.hbm.xml),以便应用启动后就完成了数据库的连接和所有映射文件的加载工作。[1]
   当启动Hibernate框架时,Hibernate的配置文件对数据库进行配置同时加载映射文件,通过映射文件把持久化对象和数据库表之间建立一个映射关系。该映射文件描述了数据库表中的信息,也描述了对应的持久化类对象的信息,同时,Hibernate内部封装了JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。[6]
   三、ORM简介
   ORM主要用于解决面向对象编程语言和关系数据库之间不协调的问题。
   对象关系映射(Object Relational Mapping,ORM)是将java对象的状态映射到数据库上,即将java中的对象与对象的关系对应为关系数据库中表与表之间的关系,以便提供透明持久化操作。ORM的目标是简化持久化模型中的实体对象,使开发人员避免编写数据访问的代码。它的作用是在关系型数据库和对象之间做一个映射。在引入一个ORM后,可以用ORM保存,删除,读取对象,ORM负责生成SQL,开发人员只需要关心对象。[7]
   四、Hibernate的关联映射
   Hibernate的核心任务是根据映射文件中配置信息建立实体对象与关系数据库二维表之间的映射。Hibernate首先由SessionFactory将一个普通的java对象(POJO)转换成持久化类,再通过ORM在数据库表和类的对象之间建立映射,通过JDBC,JNDI等数据库接口访问数据库[2],关联映射的定义在这里尤为重要。
   1.持久化类及持久化对象
   Hibernate的作用是使普通的java对象成为持久化类。持久化对象(persistent object)是一个完全符合java bean规范的纯java对象,它包含符合统一标准的属性和方法,其属性只可以通过自身的get和set方法访问,这样对外隐藏了内部实现的细节,规范了事务处理部分中每个属性所对应的数据库字段的数据操作。[3]
   Hibernate允许持久化对象拥有复杂的结构如混合类型,集合和属性,还可以拥有用户自定义的类型。这些持久化对象可以有效的反映出数据库模式的复杂结构。[8]
   2.持久化对象的映射定义
   映射文件*.hbm.xml包含了对象关系映射所需的元数据。元数据中包含了持久化类的声明及类中各个属性到数据库表中各个字段的映射关系。其属性可以作为一般值存在,也可以指向其他实体的关联,在关系型数据库中体现为数据表的外键。[3]持久化类及持久化对象的关系映射代码如下:
  public class TableMany implements java.io.Serializable {
   // Fields
   private Integer priKeyMany;
   private TableOne tableOne;
   // Constructors
   /** default constructor */
   public TableMany() {
   }
   /** minimal constructor */
   public TableMany(Integer priKeyMany) {
   this.priKeyMany = priKeyMany;
   }
   /** full constructor */
   public TableMany(Integer priKeyMany,TableOne tableOne) {
   this.priKeyMany = priKeyMany;
   this.tableOne = tableOne;
   }
   // Property accessors
   public Integer getPriKeyMany() {
   return this.priKeyMany;
   }
   public void setPriKeyMany
  (Integer priKeyMany) {
   this.priKeyMany = priKeyMany;
   }
   public TableOne getTableOne() {
   return this.tableOne;
   }
   public void setTableOne(TableOne tableOne) {
   this.tableOne = tableOne;
   }
  }
  public class TableOne implements java.io.Serializable {
   // Fields
   private Integer priKeyOne;
   private String column1;
   private String column2;
   private Set tableManies = new HashSet(0);
   // Constructors
   /** default constructor */
   public TableOne() {
   }
   /** minimal constructor */
   public TableOne(Integer priKeyOne) {
   this.priKeyOne = priKeyOne;
   }
   /** full constructor */
   public TableOne(Integer priKeyOne,String column1,String column2,
   Set tableManies) {
   this.priKeyOne = priKeyOne;
   this.column1 = column1;
   this.column2 = column2;
   this.tableManies = tableManies;
   }
   // Property accessors
   public Integer getPriKeyOne() {
   return this.priKeyOne;
   }
   public void setPriKeyOne(Integer priKeyOne) {
   this.priKeyOne = priKeyOne;
   }
   public String getColumn1() {
   return this.column1;
   }
   public void setColumn1(String column1) {
   this.column1 = column1;
   }
   public String getColumn2() {
   return this.column2;
   }
   public void setColumn2(String column2) {
   this.column2 = column2;
   }
   public Set getTableManies() {
   return this.tableManies;
   }
   public void setTableManies(Set tableManies) {
   this.tableManies = tableManies;
   }
  }
   3.持久化操作
  数据在持久化操作前,利用Hibernate的Session从数据库中存取对象记录。首先从SessionFactory中获取一个Hibernate的Session工作单元。然后从SessionFactory类中获取Session实例,得到全局的SessionFactory,从而可以从中获取Session进行对象的操作。[3]持久化操作代码如下:
  session = HibernateSessionFactory.getConfiguration().buildSessionFactory().openSession();
   hql=hql statement;
   query = session.createQuery(hql);
   query.setString(0,parameter);
   persistent class name persistent object = (persistent class name)query.uniqueResult();
   …
   Transaction tx = null;
   try
   {
   tx = session.beginTransaction();
   session.save(persistent object);
   tx.commit();
   }catch(Exception e)
   {
   if(tx!=null)
   {
   tx.rollback();
   }
   }finally
   {
   session.close();
   }
   五、总结
   ORM的作用是在关系型数据库和业务实体对象之间做一个映射,程序员在具体操作业务对象的时候,只需要像操作对象一样,无需使用SQL语句即可操作,ORM框架应该应当遵循简单、传达性和精确性的三个核心原则[9]。对于建模者来说,可以很方便的开发信息系统;对于业务实体的设计者来说,也可以在脱离数据结构的基础上使用业务实体并建筑企业级的应用系统。
  
  参考文献
  [1]李雷孝,刘志强,杜慧敏,冀强.Struts和Hibernate整合框架研究与应用[J].内蒙古工业大学学报,Vol 29,No.3,2010,pp186-190.
  [2]Ted Husted,Cedric Dumoulin,George Franciscus,et al.Struts in Action[M].America:Manning Publications Co,2003.
  [3]陈辉,赵宏升,张艳春.Struts+Spring+Hibernate框架的整合实现[J].河南大学学报,Vol.40,No.6,Nov.2010,pp642-645.
  [4]龚雪冰,何彪,基于Tapestry+Spring+hibernate框架的Web应用[J].计算机技术与发展,2007,17(4),pp131-135.
  [5]李德兵,尹站文,王洪明.JavaEE基于Hibernate的ORM框架[J].电子技术,pp7-8,3.
  [6]刘斌,王最.SSH框架在OA开发中的应用[J].计算机技术与发展,Jan 2010,Vol.20,No.1,pp151-154.
  [7]王海涛,贾宗璞,基于Struts和Hibernate的Web应用开发[J].计算机工程,2011,Vol.37,No.9,pp112-114.
  [8]高瞻,锁志海.基于Spring+Struts+Hibernate框架的网络评比系统[J].微计算机信息,2010,26(5-3):179-181.
  [9]http://www.cnblogs.com/godspeed_yjx/archive/2008/09/29/1301829.html.
  
  本文系保定学院2010年科研基金项目成果(项目编号:2010Z13)。
  
  作者简介:吉雪芸(1978—),女,江苏泰兴人,硕士,保定学院数学与计算机系讲师,研究方向:计算机软件技术。
其他文献
中央顾问委员会委员、中国社会科学院顾问于光远同志最近在江西省科协、省社联、省哲学社会科学研究所、省经济研究所举办的报告会上作了题为“学习十二大关于经济发展战略问
本文用反映经济发展规模等七项统计指标,全面评价了90年代以来甘肃经济综合发展水平。并定量分析了甘肃经济发展比全国滞后的根本原因。提出了加速甘肃经济市场化的对策建议。
1996年3月17日八届全国人大第四次会议通过了《中华人民共和国行政处罚法》(以下简称《行政处罚法》),这是一部我国非常重要的基本法,也是我们国家第一次从法律制度上全面规
根据北京市建委、计委、规划委、市政管委和物价局最近发出的通知,从1997年起,北京市出售新建住宅商品房(包括危改和安居住宅售房)按使用面积计算售价。所谓使用面积的概念是
墨子的功利主义思想在中国伦理思想发展史上独具特色,它追求义利合一,提倡利他主义,富具宗教精神,主张动机与效果的统一,内容丰富多彩。对于我们构建社会主义经济伦理具有重要的启
本文论述了汉代方士在文化舞台上所扮演的三种角色:首先,他们是“学者”,撰写了《淮南子》等书籍;其次,他们是“科学家”,在炼丹术、医学、天文学、磁学等方面取得了重大成绩;再次,他们是“文学家”,汉代小说主要就是由他们创作的。
杰克·伦敦是美国文学史上一位重要的批判现实主义作家。《马丁·伊登》是他的代表作 ,杰克·伦敦将自己对人生、对生活的美好追求和奢望全部寄托于马丁身上 ,在
要贯彻落实中央宣传部、教育部《普通高校思想政治理论课建设体系创新计划》的精神,做到“以教育教学实效性为评价标准”,在高校思想道德修养与法律基础课教学中,必须注重从
介绍了竹材弧形重组材高频热压机的总体结构、主要参数、控制系统及电磁辐射防护的设计;分析了采用高频压机的原因和高频热压原理。
针对恶劣的煤矿生产环境和事故救援的需求,提出了一种基于ZigBee的安全监控系统。该监控系统主要以CC2530和NRF24LE1核心,集矿井人员定位和瓦斯检测于一体。该系统性能稳定,技术