Hibernate-chapter one

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate-chapter one相关的知识,希望对你有一定的参考价值。

 

======什么是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的主要内容,如果未能解决你的问题,请参考以下文章

10 个你可能还不知道 VS Code 使用技巧

markdown列表中的缩进

调整片段中 TextView 的文本大小

片段被视图分页器布局切割

CentOS yum 命令出现 [Errno 14] curl#6 - "Couldn't resolve host ..." 的解决方法(代码片段

Golang PrintfSprintf Fprintf 格式化