注:本文是答3.如何写一个orm框架 的,仅为了自己学习,向原博主致敬。
原博文网址:http://www.cnblogs.com/sunniest/p/4646515.html
一、Hibernate工作原理
Hibernate工作过程:
(1)Configuration读取Hibernate的配置文件Hibernate.cfg.xml 和映射文件 *.hbm.xml 中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个单例的多线程SessionFactory对象;
(2)然后每个线程SessionFactory对象生成一个 Session 对象;
(3)然后线程Session对象生成Query 对象或者Transaction对象;可以通过Session对象的相关方法对PO进行加载、保存、更新、删除等;也可以通过Query对象执行查询操作;
(4)如果没有异常,Transaction对象将提交这些数据到数据库中。
Hibernate的核心组件
1.Configuration:Configuration 负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate启动过程中,Configuration类的实例首先定位映射文件位置、读取配置,然后创建SessionFactory。
2.SessionFactory:SessionFactory负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象,这里用到了工厂模式。
3.Session:Session负责执行持久化对象的操作。它使用 get()、load()、save()、update()和delete()等方法对PO进行加载、保存、更新和删除等操作。
4.Transaction:Transaction负责事务相关操作,用来管理Hibernate事务,它的主要方法是commit()和rollback(),可以使用Session的beginTransaction()方法生成。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
5.Query:Query负责各种数据库查询。
6.Hibernate的配置文件:配置数据库连接参数。
7.映射文件:映射文件(xx.hbm.xml)用来把PO与数据库的表、PO之间的关系与表之间的关系以及PO的属性与表字段一一映射起来,它是Hibernate的核心文件。
8.持久化对象:持久化对象PO可以是普通的JavaBean,唯一特殊的是它们与Session相关联。
PO在Hibernate中存在三种状态:临时状态(Transient)、持久化状态(Persistent)和托管状态(Detached)。
临时对象:当一个JavaBean对象在内存中孤立存在不与数据库中的数据有任何关联时。
持久化对象:当它与一个Session相关联时,就变成持久化对象(Persistent Object)。
脱管对象:在这个Session被关闭的同时,这个对象也会脱离持久化状态,变成脱管对象(Detached Object);这时该对象可以被应用程序的任何层自由使用。