Hibernate(之一)--基本介绍

原创 2015年07月06日 21:01:00

Hibernate是轻量级Java EE应用的持久层的解决方案,Hibernate不仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度缩短处理数据持久化时间。
Hibernate较之另一个持久层框架MyBatis,Hibernate更具有面向对象的特征:受Hibernate的影响,JavaEE规范抛弃了传统的Entity EJB,改为使用JPA作为持久层解决方法。而JPA实体完全可以当成Hibernate PO(Persistent Object,持久化对象)使用,Hibernate倡导低侵入式的设计,完全采用普通java对象(POJO),不要求PO继承Hibernate的某个超类或实现Hibernate的某个接口。
Hibernate充当了面向对象的程序设计语言和关系数据库之间的桥梁,Hibernate允许程序开发者采用面向对象的方式操作关系数据库。

ORM

ORM(Object/Relation Mapping)即对象/关系数据库映射。ORM可以理解成一种规范,他概括论述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的映射。ORM框架可以把关系数据库包装成面向对象的模型。在JavaEE规范里的JPA规范就是一种ORM规范,JPA规范并不提供任何ORM实现,JPA规范提供了一系列的编程接口,而JPA实现则负责为这个编程接口提供实现。如果开发者面向JPA编程,那么应用程序底层可以在不同的ORM框架之间自由切换。
采用ORM框架之后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层的SQL操作。

流行的ORM框架

  • JPA :JPA本身是一种ORM规范,并不是ORM产品。它是JavaEE规范制定者向开源世界学习的结果,JPA实体与HibernatePO十分相似,甚至完全可以作为其使用,所以也有很多说法将HibernatePO称为实体。JPA最大优势在于它是官方标准,所以有通用性,如果程序面向JPA编程,应用程序就可以在各种ORM框架之间自由切换。
  • Hibernate:开源,已被JBoss选作为持久层的解决方案。Hibernate灵巧的设计,优秀的性能,还有丰富的文档都是他优秀的优势
  • MyBatis(早起叫iBATIS):与其称它是一种ORM框架不如称为“SQL Mapping”框架,但它并不支持纯粹的面向对象的操作,逐渐被取代,但在一些公司特别是一些对数据访问特别灵活的地方,MyBatis更加灵活,它允许开发者直接编写SQL语句。
  • TopLink:主要作为JPA的实现。

Hibernate概述

Hibernate的目标是释放开发者通常的数据持久化相关的编码。它与其他ORM框架具有的优势:

  • 开源和免费
  • 轻量级封装
  • 有可扩展性,API开放
  • 开发者活跃,产品稳定

PO = POJO + 持久化注解
普通的JavaBean不具备持久化操作的能力,为了具备持久化操作的能力,还需要为这个POJO添加一些注解。

Hibernate配置文件的默认文件是hibernate.cfg.xml,当程序调用Configuration对象的configure()方法时,Hibernate会自动加载该文件。问价根元素是hibernate-configuration,根元素里有session-factory子元素,该元素有许多property子元素,是数据库连接的必要元素。
Hibernate并不推荐采用DriverManager来连接数据库,而是推荐使用数据源来管理数据库连接,这样能保证最好的性能。Hibernate推荐使用C3P0数据源。数据源是一种提高数据库连接性能的常规手段,数据源会负责维持一个数据库连接池,当程序创建数据源实例时,系统会一次性的创建对各数据库连接,并把这些数据库连接保存在连接池里,当程序需要进行数据库访问时,无需重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。当使用数据库连接访问数据库结束后,无需关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式就可以避免频繁的过去数据库连接,关闭数据库连接所导致的性能下降。

为了使用Hibernate进行持久化操作,通常有如下步骤

  • 开发持久化类,由POJO+持久化注解组成
  • 获取Configuration
  • 获取SessionFactory
  • 获取Session,打开事务
  • 用面向对象的方式操作数据库
  • 关闭事务,关闭Session

对PO的操作必须在Session管理下才能同步到数据库。Session由SessionFactory工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。SessionFactory对象由Configuration生成,Configuration负责加载Hibernate配置文件。

Hibernate比JDBC的优点:

  • 不需要再编写Sql语句,而是允许采用OO方式来访问数据库
  • 在JDBC访问过程中大量的checked异常被包装成Hibernate的Runtime的Runtime异常,从而不再要求程序必须处理所有异常。

下面是一个简要的Hibernate体系结构
这里写图片描述

下面是全面解决方案的体系架构
这里写图片描述

  • SessionFactory:SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。它是线程安全的,它是生成Session的工厂,本身需要依赖于ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。
  • Session:它是应用程序与持久存储层之间交互操作的个一个单线程对象。所有持久化对象必须在Session管理下才可以进行持久化操作,此对象的生命周期很短,它底层封装了JDBC对象,他也是Transaction的工厂。Session对象持有必选的一级缓存,在显式执行flush之前,所有持久化操作的数据都在缓存中的Session对象处。
  • 持久化对象(PO):在程序中对持久化对象的操作都将自动转换为对持久层的修改。持久化对象完全可以是普通的JavaBean/POJO,唯一区别是他们正与一个Session关联。
  • 事务(Transaction):代表一次原子操作,它具有数据库事务的概念。Hibernate是对底层具体的JDBC、JTA以及CORBA事务的抽象。某些情况下,一个Session之内可能包含多个Transaction对象。
  • 连接提供者(ConnectionProvider):它是生成JDBC连接的工厂,他通过抽象将应用程序与底层的DataSource或DriverManager隔离开,这个对象无需应用程序直接访问,仅在应用程序需要扩展时使用。

持久化类的要求

应遵循如下规则:

  • 提供一个无参数的构造器:Hibernate就可以使用Constructor.newInstance()来创建持久化类的实例。为了在运行时生成代理,构造器的访问权限修饰符至少是包可见的。
  • 提供一个标识属性:通常映射数据库表的主键字段。建议使用包装类。
  • 为持久化类的每个成员变量提供setter和getter方法
  • 使用非final类
  • 重写equals()和hashCode()方法

持久化对象的状态

PO可有如下三种状态

  • 瞬态: PO从未与Session关联过
  • 持久化:PO与Session关联起来,且该实例对应到数据库记录
  • 脱管:PO与Session曾经关联过,但因为Session的关闭原因,PO实例脱离的Session的管理

下面是Hibernate持久化对象的状态演化图
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Spring(之二)--深入研究

Spring AOP从动态角度考虑程序运行过程,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,能更好的抽离出各模块关注点。Spring的声明式事务管理正是通过AOP来实现的。IoC...

Spring(之三)-- Spring整合Struts,Hibernate

Spring整合Struts在web应用中创建Spring容器有如下两种方式: 直接在web.xml文件中创建Spring容器 利用第三方MVC框架的扩展点,创建Spring容器 对于轻量级的Java...

Spring(之一)--基本用法

Spring是为企业应用的开发提供轻量级解决方法。包括:基于依赖注入的核心机制、基于AOP的声明式事务管理、与多种持久层技术的整合,以及优秀的Web MVC框架等。Spring贯穿表现层、业务层、持久...

Struts(之一)--基本介绍

MVC思想MVC并不是Java语言所特有的设计思想,它是所有面向对象程序设计语言都应该遵守的思想。 MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller(...

李东学孙俪二度合作 《甄�传》穿越千年爱恋 CH-8002

《后宫甄�传》李东学孙俪二度合作 ,CH-WSK-Z  新浪娱乐讯 近日,由郑晓龙执导,孙俪、李东学、陈建斌、蔡少芬等众多明星联袂主演的宫廷古装大戏《后宫甄�传》预告片蹿红网络。剧中,李东学饰演的“果...

log4j配置详解

 log4j.properties配置详解(转载) Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的...

log4j的基本配置参数

log4j配置文件有三个主要的组件:Logger,Appender和Layout,分别为日志类型,日志输出目的地,日志输出格式。 log4j.rootLogger = [level], appende...

struts2升级2.3.32或2.5.10.1

漏洞年年有,最近特别多。2017年3月6日,Apache Struts2被曝存在远程命令执行漏洞,漏洞编号:S2-045,CVE编号:CVE-2017-5638,官方评级为高危,该漏洞是由于在使用基于...

struts2.3升级到2.5步骤

一、jar包替换: 删除原工程“xwork-core-2.3.16.jar” 二、 修改web.xml: “org.apache.struts2.dispatcher.ng.filter.S...

echart图表的各种参数介绍

转载:http://blog.csdn.net/zou128865/article/details/42802671 <% String path = requ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)