======什么是Hibernate???======

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。——《百度百科》

1.Hibernate 是一个开源框架,与 Struts 这种 MVC(Model-View-Controller) 框架不同的是,Hibernate 是一种 ORM(Object/Relational Mapping) 框架。

2.ORM 意为对象关系映射,因此 Hibernate 会在 Java 对象和关系数据库之间建立某种映射,以达到存取 Java 对象的目的,是实现持久化存储(将内存中的数据存储在关系型的数据库、磁盘文件、XML数据文件中等等)的一种解决方案。

*******************普及一下ORM**************************************

  -ORM(Object/Relation Mapping):对象/关系映射

*ORM主要解决对象~关系的映射

*ORM的思想:将关系数据库中的记录映射成为对象,以对象的形式展示,程序员可以把对数据库的操作转化为对对象的操作。

*ORM采用元数据来描述对象~关系映射细节,元数据通常采用XML格式,并且放在专门的对象~关系映射文件中。

3.Hibernate 不仅管理 Java 类到数据库表的映射(包括从 Java 数据类型到 SQL 数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用 SQL 和 JDBC 处理数据的时间。这正是它的设计目标,即将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。

======Hibernate体系结构======

~简要的 Hibernate 整体体系结构大致图~

从上图可以看出,Hibernate 使用数据库(Database)和配置信息(hibernate.properties 等)来为应用程序提供持久化服务(以及持久的对象 Persistent Objects)。

我们再来看看 Hibernate 运行时的体系结构。由于Hibernate非常灵活,且支持多种应用方案, 所以这里我们只描述一下两种极端的情况。

  • “轻型”的体系结构方案

要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了 Hibernate API 的最小子集:

  • “全面解决”的体系结构方案

将应用层从底层的 JDBC/JTA API 中抽象出来,而让 Hibernate 来处理这些细节:

======基本 APIs=======

  • SessionFactory

    (org.hibernate.SessionFactory)

对于单个数据库映射关系经过编译后的内存缓存,它是线程安全且不可变的。是 Session 生成的工厂实例,也是 ConnectionProvider 的一个客户端(会用到 ConnectionProvider)。它在进程或集群的级别上,为那些在事务之前可重复使用的数据提供了选择性的二级缓存。

  • Session(org.hibernate.Session)

提供应用程序和持久化存储介质之间的一个单线程的会话对象,此对象生存期很短。它隐藏了 JDBC 连接,也是 Transaction 的工厂实例。对于应用的持久化对象及其集合,它提供了一个一级缓存;当遍历导航对象图或者根据持久化标识查找对象时,会用到这个一级缓存。

  • 持久化的对象及其集合

具有持久化状态和业务功能的单线程对象,同样生存期很短。这些对象可能是普通的 JavaBeans/POJOs(Plain Ordinary Java Object),它们只能与一个 Session 相关联。一旦 Session 被关闭,它们就会脱离持久化状态,并且可以被应用程序的任何层使用(比如跟表示层打交道的 data transfer objects)

  • 瞬态(transient)、脱管

    状态(detached)的对象及其集合

持久化的类目前没有和 Session 相关联的实例。他们可能是因为在被应用实例化后还没有被持久化,也可能是由于实例化它们的 Session 对象已经被关闭,从而脱离了持久化状态。

  • 事务(Transaction)

    (org.hibernate.Transaction)

(可选的)它是应用程序用来指定原子操作单元范围的对象,是一个单线程的、短生存周期的对象。它使用抽象把应用从底层的 JDBC、JTA 以及 CORBA 事务中隔离开。在某些情况下,一个 Session 可能涵盖多个 Transactions 对象。尽管使用该对象是可选的,但事务的划分(无论是使用底层的 API 还是使用 Transaction 对象)都是不可选的。

  • ConnectionProvider

    (org.hibernate.connection.ConnectionProvider)

(可选的)JDBC 连接的工厂和连接池。它通过抽象把应用从底层的 DataSource 或者 DriverManager 隔离开。这并不开放给应用程序使用,但对开发者而言是可以扩展或实现的。

  • TransactionFactory

    (org.hibernate.TransactionFactory)

(可选的)生成 Transaction 对象实例的工厂。仅供开发者扩展/实现用,并不开放给应用程序使用。

  • 扩展接口(Extension Interfaces)

Hibernate 提供了很多可选的扩展接口,你可以通过实现它们来定制你的持久层的行为。

======Hibernate优点======

a、封装了jdbc,简化了很多重复性代码。

b、简化了DAO层编码工作,使开发更对象化了。

c、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

d、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

e、它支持各种关系数据库,从 一对一 到 多对多 的各种复杂关系。

--------------------------------------------------------------------------------------------------------------------------------------来自尼玛星球的光军/QQ:383996901

Hibernate-chapter one的更多相关文章

  1. [转]Hibernate设置时间戳的默认值和更新时间的自动更新

    原文地址:http://blog.csdn.net/sushengmiyan/article/details/50360451 Generated and default property value ...

  2. TIJ——Chapter Two:Everything Is an Object

    If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...

  3. Hibernate对象映射类型

    Hibernate understands both the Java and JDBC representations of application data. The ability to rea ...

  4. Chapter 7. Dependency Management Basics 依赖管理基础

    This chapter introduces some of the basics of dependency management in Gradle. 7.1. What is dependen ...

  5. Hibernate设置时间戳的默认值和更新时间的自动更新

    Generated and default property values 生成的和默认的属性值 The database sometimes generates a property value, ...

  6. Hibernate Validator 6.0.9.Final - JSR 380 Reference Implementation: Reference Guide

    Preface Validating data is a common task that occurs throughout all application layers, from the pre ...

  7. HQL: The Hibernate Query Language

    Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Ass ...

  8. Hibernate Persistence Contexts

    Hibernate ORM 5.2.18.Final User Guidehttps://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/ ...

  9. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  10. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

随机推荐

  1. New Career

    Today I received the official confirmation letter with very good grade for the probation, it means t ...

  2. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

  3. 学习Cassandra的开源电子书(中英文版)

    学习Cassandra的开源电子书(中英文版)发布啦:http://teddymaef.github.io/learncassandra/ 之前发布了英文版,现在包含中文版了. 学习Cassandra ...

  4. xamarin UWP ActivityIndicator

    在xamarin的UWP平台使用ActivityIndicator时,如果你时后台创建的这个对象,请设置他的宽度,不然在UWP平台下会发现找不这个对象,其实是在这个平台和特点版本下的宽度没设置,导致有 ...

  5. Java中常见的29个运行异常

    ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotR ...

  6. javaScript 基础知识

    一.三个对话框 1.alert("提示信息") 弹出只带有一个确定按钮的对话框2.confirm("提示信息") 弹出有确定和取消按钮的对话框3.prompt( ...

  7. 让IE系列支持HTML5的html5shiv.js和respond.min.js

    HTML5越来越成为主流,被广大搜索引擎所使用,但IE对HTML5的支持却常被人唾弃. 解决方案有两种: 1.为网站创建多套模板,通过程序对User-Agent的判断给不同的浏览器用户显示不同的页面, ...

  8. java.io中的System.in、 System.out和System.err

    System.in, System.out, System.err这3个流同样是常见的数据来源和数据流目的地.使用最多的可能是在控制台程序里利用System.out将输出打印到控制台上. JVM启动的 ...

  9. (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

    (App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/MainPage.xaml", UriKi ...

  10. java自定义类加载器

    前言 java反射,最常用的Class.forName()方法.做毕设的时候,接收到代码字符串,通过 JavaCompiler将代码字符串生成A.class文件(存放在classpath下,也就是ec ...