`

hibernate体系结构整理

阅读更多

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操作,下图显示了这种映射关系。

         

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

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

        

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

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

           

        基于这些基本的映射方式,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 Position

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 High Level View

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

Hibernate Architecture

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 Caching

第一级缓存:

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

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

二级缓存:

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

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

 

参考博客:二级缓存配置
 
参考:
     
 
分享到:
评论

相关推荐

    深入浅出Hibernate4(个人整理)

    Hibernate体系结构包括: 1. 最小的体系结构方案,要求应用程序提供自己的JDBC连接并管理自己的事务。这种方案使用了Hibernate API的最小子集。 2. “全面解决”的体系结构方案将应用层从底层的JDBC/JTA API中抽象...

    hibernate 3.2中文手册 中文文档

    #### 第2章:体系结构(Architecture) - **2.1 概况(Overview)** - 概览Hibernate的整体架构,包括核心组件及其交互方式。 - **2.2 实例状态** - 详细解释Hibernate中的实例状态管理机制,如瞬态、持久化、分离等...

    Hibernate参考文档

    #### 二、体系结构 ##### 2.1 概况(Overview) Hibernate 的架构设计主要围绕几个核心组件: - **Session**: 提供了应用与数据库交互的主要接口。 - **SessionFactory**: 负责创建 Session 并管理其生命周期。 - **...

    java高级面试框架整理

    ### Java高级面试框架知识点整理 #### Struts框架详解 **1. Struts框架的基本结构** - **MVC模式实现:** Struts是一个基于MVC(Model-View-Controller)模式的Web应用框架,其中Controller部分主要由一个Servlet...

    Java 开源项目中文文档

    - **实例状态和上下文相关的Session**:Hibernate的体系结构中,Session是持久化操作的中心,管理着对象的状态和持久化存储。 #### 3. 配置 - **可编程的配置方式和SessionFactory**:Hibernate支持通过编程方式...

    java面试题+java面试题及答案整理

    计算机基础包括计算机体系结构、内存管理、网络协议等。 14. **C++**: - C++是面向对象的编程语言,与Java有诸多相似之处,但也包含指针、模板等特有概念。 15. **Weblogic及其他**: - Weblogic是Oracle提供的...

    Java企业面试题整理

    5. **项目体系结构图**:在面试中,面试者可能被要求绘制或描述一个项目的架构,这涉及到系统模块划分、技术选型、层次结构、接口设计等多个方面。例如,一个典型的Java企业级应用可能包含前端展示层、业务逻辑层、...

    javaweb的数据库连接整理jdbc.rar

    首先,我们需要了解JDBC的体系结构。JDBC由一系列接口和类组成,这些接口和类定义了与数据库进行通信的标准方法。主要组件包括: 1. **DriverManager**:这是JDBC的核心,负责管理数据库驱动程序。通过`...

    自整理Java关于基础和框架的面试题

    ##### javaException体系结构 - 异常分为**检查异常**(编译器强制处理)和**运行时异常**(编译器不强制处理)。 ##### session和cookie的区别 - **Cookie**:客户端保存的数据。 - **Session**:服务器端保存的...

    达内java笔记,精挑细选(达内助教整理)0积分

    Java基础部分包括语法、数据类型、控制结构、类与对象、继承、多态、接口、异常处理等内容。深入理解这些概念是成为一名合格的Java开发者的基础。特别是面向对象的设计原则,如封装、继承和多态,是Java的核心特性,...

    Java基础教程1.pdf(2021年整理精品文档).docx

    10. **Oracle数据库管理**:讲解了Oracle的体系结构和系统管理,为数据库的管理和维护提供基础知识。 整个教程旨在建立坚实的语言基础,培养良好的编程习惯,并为后续深入学习Java企业级开发,如Spring和Hibernate...

    Java基础知识方面的面试题pdfJava实用源码整理learns

    1. **Java语法基础**:包括变量、数据类型、运算符、控制结构(如if-else、switch、循环)、方法、类与对象、封装、继承、多态等核心概念。 2. **面向对象编程**:深入理解面向对象的设计原则,如单一职责、开闭...

    CRM+JAVA+客户关系管理源码整理

    在Java技术体系中,开发CRM系统是一项常见的任务,因为它允许开发者利用Java的强大功能来构建高效、可扩展且易于维护的CRM应用。 本资源"CRM+JAVA+客户关系管理源码整理"提供了一套基于Java的CRM系统源代码,对于...

    SSH三大框架Jar文件汇总

    SSH,即Struts、Spring和Hibernate,是Java Web开发中常用的三大开源框架,它们各自承担着不同的职责,共同构建了一个高效、松耦合的应用体系。本资源提供了这三大框架的基础核心Jar文件,使得开发者能够更方便地...

    Java面试题(自己整理)

    以下是对"Java面试题(自己整理)"中可能涉及的知识点的详细阐述: 1. **Java基础**:面试通常会从基础语法开始,如数据类型、运算符、流程控制语句(if-else,switch,for,while)、类与对象、封装、继承和多态等...

    IT名企JavaEE面试题最新整理(附答案)

    Java Collection Framework:Java集合框架是一个提供用于存储和操作集合的接口和类的体系结构。 应用服务器与Web服务器的区别:应用服务器通常提供完整的运行环境,支持Web应用的执行,而Web服务器主要处理静态内容...

Global site tag (gtag.js) - Google Analytics