hibernate体系结构整理

时间:2024-04-07 20:11:24

1.ORM介绍

 

     1.1 什么是ORM,为什么要用ORM框架?

       ORM的全称是Object/Relation Mapping对象/关系数据库映射。ORM可以理解成一种规范,它概述了这类框架的基本特征:完成面向对象编程语言和关系型数据库的映射。当ORM框架完成映射后,它既可利用面向对象程序设计语言的简单易用性,又可以利用关系型数据库的技术优势。因此,我们可以把ORM框架当成是应用程序和数据库的桥梁

      当我们使用一种面向对象程序设计语言来进行应用开发时,从项目开始起就采用的是面对对象分析、面向对象设计、面向对象编程,但到了持久层数据库访问时,又必须重返关系型数库的访问方式,这是一种糟糕的感觉。于是我们需要一种工具,它可以把关系型数据库包装成一个面向对象的模型,这个工具就是ORM框架。

    ORM优势:

1 一个API来对持久化类的对象执行基本的CRUD操作。
2 语言或API来指定引用的类和类的属性查询。
3 一个可配置的设备,用于指定映射元数据。
4 技术与事务对象交互,以执行脏数据检查,懒关联加载,以及其他优化功能。

     

     1.2 ORM映射机制

     ORM工具提供了持久化类和数据表之间的映射关系 ,通过这种关系的映射过渡,我们可以很方便地通过持久化类对数据表进行操作。实际上,所有ORM工具大致上都遵循相同的映射思路。

 

        ORM基本映射有如下这几条映射关系:

        (1) 数据表映射类

        持久化类被映射到一个数据表。当我们使用这个持久化类来创建实例、修改属性、删除实例时,系统自动会转换为对这个表进行CRUD操作,下图显示了这种映射关系。

         hibernate体系结构整理

  (2) 数据表的行映射对象(即实例):

        持久化类会生成很多的实例,每个实例就对应数据表中的一行记录。当我们在应用中修改持久化类的某个实例时,ORM工具将会转换成对对应数据表中的特定行的操作。每个持久化对象对应数据表的一行记录。如下图所示:

        hibernate体系结构整理

      (3) 数据表的列(字段)映射对象的属性:

       当我们在应用中修改某个持久化对象的制定属性时(持久化数据映射到数据行),ORM将会转换成对对应表中指定数据行、指定列的操作。数据表列被映射到对象属性的示意图如下表示:

           hibernate体系结构整理

        基于这些基本的映射方式,ORM工具可完成对对象模型和关系模型之间的相互映射,由此可见

       在ORM框架中,对象持久化是一种中间媒介,应用程序只需要操作持久化对象,ORM框架则负责将这种操作转换为底层数据库操作——这种转换对开发者来说透明,无需开发者关心,从而将开发者从关系模型中解放出来,使得开发者能够以面向对象的思维操作关系型数据库。

 

 

     1.3 ORM框架有哪些?

     目前流行的ORM框架有如下这些产品:

(1)Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。整个HIbernate项目也一并投入了Jboss的怀抱,而JBoss又加入了RedHat组织,所以现在Hibernate属于RedHat 的一部分。Hibernate 灵巧的设计、优秀的性能,还有其丰富的文档都是其风靡全球的重要因素。

(2)iBatis: Apache软件基金组织的子项目。与其称它为一种ORM框架,不如称它为一中“SQL Mapping”框架。曾经在J2EE的开发中扮演非常重要的角色,但因为不支持存粹的面向对象操作,因此现在逐渐地被取代。但是在一些公司,依然占有一席之地,特别是一些对数据访问特别灵活的地方,iBatis更加的灵活,它允许开发人员直接编写SQL语句。

(3)TopLink:Oracle公司的产品,作为一个遵循OTN协议的商业产品,TopLink 在开发过程中可以*地下载和使用,但是一旦作为商业产品被使用,则需要收取费用。由于这一点,TopLink 的市场占有率不高。

(4)OBJ:Apache软件基金组织的子项目。另一个开源的ORM框架,可以说是Apache作为iBatis之后的取代产品,也是非常优秀的O/R Mapping框架,但是由于Hibernate 的广芒太盛,所以并未有广泛的使用,而且由于OJB的开发文档不是很多,这也影响了OJB的流行。

 

     1.4 jdbc vs Hibernate vs myBatis ?

 

 

2. hibernate介绍

    2.1 hibernate简介
       Hibernate 是一种面向Java环境对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 Hibernate的目标是解放开发者通常的数据持久化相关编程任务的95%。对于以数据为核心的程序而言,往往在数据库中使用存储过程来实现商业逻辑,Hibernate是最有用的。不管怎样,Hibernate能够消除那些针对特定数据库厂商的SQL代码,并且结果集从表格式的形式转换成值对象的形式。

hibernate体系结构整理

Hibernate不仅仅管理了Java类到数据库表的映射(包括Java 数据类型到SQL数据类型的映射),还提供查询数据和获取数据的方法,可以大幅度地减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate支持几乎所有主要的RDBMS。

        HIbernate能够从众多的ORM框架中脱颖而出,因为Hibernate和其他的框架对比有以下的优势:

       (1)开源免费的License,方便需要时研究源代码,改写源代码,进行功能定制

       (2)轻量级封装,避免引入过多复杂的问题,调试容易,减轻程序员的负担。

       (3)具有可扩展性,API开放。功能不够用时,自己进行编码扩展。

       (4)开发者活跃,有稳定的发展保障

 

      2.2 hibernate体系结构及核心API 
 
     
 
Hibernate架构是分层的,隔离的不必知道底层API。 Hibernate中使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。

下面是Hibernate应用程序体系结构的一个非常高的水平视图。

hibernate体系结构整理

下面是Hibernate的应用架构与一些重要的核心课程的详细视图。

hibernate体系结构整理

Hibernate使用各种现有的Java API,如JDBC,Java事务API(JTA)和Java命名和目录接口(JNDI)。 JDBC提供了常见的关系数据库功能的抽象的一个基本水平,使具有JDBC驱动程序,Hibernate的支持几乎任何数据库。 JNDI和JTA允许Hibernate与J2EE应用服务器进行集成。

Configuration 对象:

在任何Hibernate应用程序中创建并通常在应用程序初始化创建一次,它代表了Hibernate所需的配置或属性文件。

Configuration对象提供了两个按键组成部分:

1.数据库连接:这是通过Hibernate支持的一个或多个配置文件来处理。这些文件是:hibernate.properties和hibernate.cfg.xml。

2.类映射设置 :此组件创建Java类和数据库表之间的连接

 

SessionFactory 对象:

Configuration对象用于创建一个SessionFactory对象,它反过来可以配置Hibernate的使用提供的配置文件的应用程序,并允许一个Session对象被实例化。通过SessionFactory是线程安全的对象和使用的应用程序的所有线程。

通过SessionFactory是重量级的对象,因此通常它被应用程序时创建的启动和保持以备后用。将使用一个单独的配置文件需要每个数据库都有一个SessionFactory对象。所以,如果正在使用多个数据库,那么就需要创建多个SessionFactory的对象。

 

Session 对象:

Session对象用于获取与数据库的物理连接。 Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对象被保存,并通过一个Session对象中检索。会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,应该被创建并根据需要销毁他们。

 

Transaction 对象:

事务代表一个工作单元与数据库和大部分RDBMS支持事务功能。在Hibernate事务是由一个基本的事务管理器和事务(从JDBC或JTA)来处理。

这是一个可选的对象和Hibernate应用程序可以选择不使用这个接口,而不是在他们自己的应用程序代码管理事务。

 

Query 对象:

查询对象使用SQL或Hibernate查询语言(HQL)字符串从数据库中检索数据并创建对象。一个查询实例是用来绑定查询参数,限制查询返回的结果数量,并最终执行查询。

 

Criteria 对象:

Criteria对象用于创建和执行面向对象的条件查询来检索对象。

 
      2.3 项目准备  
        工具准备:jdk1.7+maven3+mysql5.5 +navicat+hibernate tool插件安装(http://tools.jboss.org/downloads/jbosstools/luna/4.2.3.Final.html
)
        构建依赖 :hibernate-core,junit,mysql-connector-java
 
3. hibernate快速入门
      3.1 创建hibernate工程
      3.2 创建orm mapping持久化类
      3.3 创建对象-关系 映射文件
      3.4 通过hibernate api 进行CRUD
 
4. hibernate重要特性
   4.1 hibernate常用配置(对象映射,懒加载)
    4.2 session介绍
    4.3 HQL查询
    4.4 QBC(criteria)查询
    4.5hibernate的批量处理,插入/更新/删除
 
5. hibernate缓存机制
    缓存是所有关于应用程序的性能优化和它位于应用程序和数据库之间,以避免数据库访问多次,让性能关键型应用程序有更好的表现。

缓存对Hibernate很重要,它采用了多级缓存方案下文所述:

hibernate体系结构整理

第一级缓存:

第一级缓存是Session的缓存,是一个强制性的缓存,通过它所有的请求都必须通过。 Session对象不断自身的动力的对象,提交到数据库之前。

如果发出多个更新一个对象,Hibernate试图拖延尽可能长的时间做了更新,以减少发出的更新SQL语句的数量。如果您关闭会话,所有被缓存的对象都将丢失,要么持久,或在数据库中更新。

二级缓存:

二级缓存是可选的缓存和一级缓存,总是会征询任何试图找到一个对象的二级缓存之前。第二级缓存可以在每个类和每个集合基础上进行配置,主要负责在会话缓存的对象。

任何第三方缓存可以使用Hibernate。org.hibernate.cache.CacheProvider接口提供,必须实施提供Hibernate一个句柄缓存实现。

 

参考博客:二级缓存配置
 
参考: