ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件
中。ORM的基本框架如下:
二、Hibernate的核心组件
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml,一般使用xml来进行配置)和映射文件(***.hbm.xml),把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据表,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。 除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分: 1、Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。 2、SessionFactory接口:产生Session实例工厂。 3、Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。 4、Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。 5、Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
三、JavaBeans在Hibernate中存在三种状态
持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID). JavaBeans在Hibernate中存在三种状态: 1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。
1)在使用代理主键的情况下, OID 通常为 null
2)不处于 Session 的缓存中 3)在数据库中没有对应的记录
2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)。
1)OID 不为 null 2)位于 Session 缓存中 3)若在数据库中已经有和其对应的记录, 持久化对象和数据库中的相关记录对应 4)Session 在 flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库 5)在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象
3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached Object),可以被应用程序的任何层自由使用。
1)OID 不为 null 2)不再处于 Session 缓存中 3)一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录
四、Hibernate的基本运行过程
Hibernate的运行过程如下: 1、应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。 2、从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作结果到数据库中。
五、Hibernate的优/缺点: 优点: 1、数据库对象化 以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加具有层次性。 2、移植性 因为Hibernate做了持久层的封装,我们并没有直接操纵数据库,代码都具有可复用性。 3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。 Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。 4、提高效率,提高生产力。 缺点: 1、使用数据库特性的语句,将很难调优 2、对大批量数据更新存在问题 3、系统中存在大量的攻击查询功能