1. 五个核心接口
介绍五个接口
1. Configuration
作用:对Hiebernate进行配置和启动;
在启动Hibernate的过程中,Configuration类的实例读取Hibernate.cfg.xml配置信息,并创建SessionFactory。
2. SessionFactory
作用:创建Session的实例;
特点:重量级对象,线程安全;
由于这个特点一个项目通常需要一个SessionFactory就可以了,但是要操作多个数据库就必须为每个数据库指定一个SeesionFactory。
3. Session
作用:持久层管理器,它包含一些持久层相关的操作,诸如存储持久对象到数据库,以及从数据库中获得他们;
特点:轻量级对象,非线程安全;
创建和销毁都不会占用多少资源,实际项目中会不断的创建和销毁Session对象。但是由于它是非线程安全的最好一个线程只创建一个Session对象。
4. Transaction
作用:对实际事务实现的一个抽象,这些实现包括JDBC事务,、JTA 中的UserTransaction、甚至可以是 CORBA 事务;
它是一个可选的API,可以使用也可以自己做实现。
5. Query接口和Criteria
Query接口作用:方便对数据库以及持久对象进行查询
Criteria接口作用:与Query接口很相似,允许创建并执行面向对象的标准化查询。
值得注意的是Query也是轻量级的,它不能在Session之外使用。
2. Hibernate原理
1. Configuration加载Hibernate.cfg.xml,
2. 生成SessionFactory
3. 加载对象-关系映射文件*.hbm.xml
4. 创建session对象
5. 调用session API保存对象
6. 根据Dialect生成和底层数据库平台相关的sql代码
7. 对JDBC封装,执行sql脚本
上面讲到的过程让我想到了在.NET中使用到ADO.NET,他们其实都是为了和数据库进行交互而存在的,从本质上讲,Hibernate最终还是通过JDBC去操作数据库,只是对JDBC进行了封装。