Hibernate工做原理及优缺点详解

Hibernate工做原理程序员

Hibernate使用了J2EE架构中的以下技术:JDBC、JTA、JNDI。其中JDBC是一个支持关系数据库操做的一个基础层;它与JNDI和JTA一块儿结合,使得Hibernate能够方便地集成到J2EE应用服务器中去。web

在这里,咱们不会详细地去讨论Hibernate API接口中的全部方法,咱们只简要讲一下每一个主要接口的功能,若是你想了解得更多的话,你能够在Hibernate的源码包中的net.sf.hibernate子包中去查看这些接口的源代码。数据库

下面咱们依次讲一下全部的主要接口:编程

核心接口设计模式

如下5个核心接口几乎在任何实际开发中都会用到。经过这些接口,你不只能够存储和得到持久对象,而且可以进行事务控制。安全

Session接口 Session接口对于Hibernate 开发人员来讲是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,建立和销毁它都不会占用不少资源。这在实际项目中确实很重要,由于在客户程序中,可能会不断地建立以及销毁Session对象,若是Session的开销太大,会给系统带来不良影响。服务器

SessionFactory 接口 这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。   令你感到奇怪的是SessionFactory并非轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来讲,一个项目一般只须要一个SessionFactory就够了,可是当你的项目要操做多个数据库时,那你必须为每一个数据库指定一个SessionFactory。 SessionFactory在Hibernate中实际起到了一个缓冲区的做用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些未来有可能重复利用的数据。架构

Configuration 接口 Configuration接口的做用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程当中,Configuration类的实例首先定位映射文档的位置,读取这些配置,而后建立一个SessionFactory对象。框架

Query和Criteria接口 Query接口让你方便地对数据库及持久对象进行查询,它能够有两种表达方式:HQL语言或本地数据库的SQL语句。Query常常被用来绑定查询参数、限制查询记录数量,并最终执行查询操做。 Criteria接口与Query接口很是相似,它容许你建立并执行面向对象的标准化查询。 值得注意的是Query接口也是轻量级的,它不能在Session以外使用。ide

Callback 接口 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。通常而言,Callback接口在用户程序中并非必须的,但你要在你的项目中建立审计日志时,你可能会用到它。如下是它的策略接口:

*主键的生成 (IdentifierGenerator 接口)

*本地SQL语言支持 (Dialect 抽象类)

*缓冲机制 (Cache 和CacheProvider 接口)

*JDBC 链接管理 (ConnectionProvider接口)

*事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)

*ORM 策略 (ClassPersister 接口)

*属性访问策略 (PropertyAccessor 接口)

*代理对象的建立 (ProxyFactory接口)

Hibernate为以上所列的机制分别建立了一个缺省的实现,所以若是你只是要加强它的某个策略的功能的话,只需简单地继承这个类就能够了,没有必要从头开始写代码。

Hibernate运行在两种环境下:可管理环境和不可管理环境

一、可管理环境这种环境可管理以下资源:池资源管理,诸如数据库链接池和,还有事务管理、安全定义。一些典型的J2EE服务器(JBoss、Weblogic、WebSphere)已经实现了这些。

二、不可管理环境只是提供了一些基本的功能,诸如像Jetty或Tomcat这样的servlet容器环境。

Hibernate的优点:

优势:

Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate能够用在任何JDBC可使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至能够是BMP里面的访问数据库的代码。

Hibernate是一个和JDBC密切关联的框架,因此Hibernate的兼容性和JDBC驱动,和数据库都有必定的关系,可是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

Hibernate不能用来直接和Entity Bean作对比,只有放在整个J2EE项目的框架中才能比较。而且即便是放在软件总体框架中来看,Hibernate也是作为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。

Hibernate能够应用在任何使用JDBC的场合。

Hibernate 使用 Java 反射机制 而不是字节码加强程序来实现透明性。

Hibernate 的性能很是好,由于它是个轻量级框架。 映射的灵活性很出色。

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

缺点:

它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)。

让我再列一次我已经列n次的框架结构:

传统的架构:1Session BeanEntity BeanDB

为了解决性能障碍的替代架构:2Session BeanDAOJDBCDB

使用Hibernate来提升上面架构的开发效率的架构:3Session BeanDAOHibernateDB

以上就是e良师益友为你们详细讲解的三大框架中Hibernate的原理及其优缺点!

相关文章
相关标签/搜索