标签:
Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系型数据库中的表格与表格之间的关系。它是Java应用与关系数据库之间的桥梁,负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据库访问API。
Hibernate的体系结构
Hibernate通过配置文件( hibernate.cfg.xml )和映射文件( *.hbm.xml )把Java对象或持久化对象( Persistent Object,PO )映射到数据库的表格,然后通过操作PO,对数据表中的数据进行增、删、改、查等操作。
Hibernate的核心组件
1、Hibernate配置文件(hibernate.cfg.xml):
主要用来配置数据库连接参数,如数据库驱动程序、URL、用户名、密码等。hibernate.cfg.xml还在其<mapping>子元素中定义用到的xxx.hbm.xml映射文件列表
2、映射文件(xxx.hbm.xml):
用来把PO与数据库中的数据表、PO之间的关系与数据库之间的关系、以及PO的属性与表字段一一映射起来,是Hibernate的核心文件
3、Configuration类:
用来读取Hibernate配置文件,并生成SessionFactory对象。
4、SessionFactory接口:
产生Session实例的工厂
5、Session接口:
用来操作持久化对象PO。有get()、load()、save()、update()、delete()等方法用来对PO进行加载、保存、更新及删除等操作,是Hibernate的核心接口
6、Query接口:
Query负责执行各种数据库查询。它可以使用HQL语言对PO进行查询操作。Query对象可以使用Session的createQuery()方法生成
7、Transaction接口:
用来管理Hibernate事务,主要方法有commit()和rollback(),可从Session的beginTransaction()方法生成
8、持久化对象(PO):
可以是普通的JavaBean,每一个数据表对应一个持久化对象(PO),PO可以看成是与数据库表相映射的Java对象,PO中不应该包含任何对数据的操作,唯一特殊的是他们与Session相关联。
JavaBean在Hibernate中存在三种状态:
(1)临时状态(transient):
由new命令开辟内存空间刚生成的Java对象就处于临时态。临时对象在内存中是孤立存在的,不和数据库的数据有任何关联关系。在Hibernate中,可通过Session的save()或saveOrUpdate()方法将临时对象与数据库相关联,并将数据插入到数据库中,此时转变成持久化对象。
(2)持久状态(persistent):
处于持久态的对象也称为PO,处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果使用Hibernate的delete()方法,对应的持久对象就变成临时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
当一个Session执行close()或clear()之后,持久对象变成脱管对象。
持久对象的特点:和Session实例关联、在数据库中有与之关联的记录。
(3)脱管状态(detached):
当与某持久对象关联的Session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到Session上时,将再次转变成持久对象。
脱管对象拥有数据库的标识值,可通过update()、saveOrUpdate()等方法,转变成持久对象
Hibernate的运行过程
(1) 应用程序调用Configuration类,该类读取Hibernate配置文件级映射文件中的信息,并生成一个SessionFactory
(2) 从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象
(3) 通过Session对象的get()、load()、save()、update()、delete()、saveOrUpdate()等方法对PO进行加载、保存、更新、删除等操作;通过Session对象生成一个Query对象,进行查询操作
(4) 如无异常,Transaction对象将提交这些操作结果到数据库中
标签:
原文地址:http://www.cnblogs.com/Donnnnnn/p/5688307.html