主要有5个核心接口:
1)Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。
Hibernate的应用通过Configuration获取对象——关系映射文件的元数据和动态配置Hibernate的属性,创建SessionFactory对象。
2)SessionFactory接口:初始化Hibernate,充当数据源的代理,创建Session对象。
一个SessionFactory对应一个数据源,从SessionFactory中获取Session实例:
SessionFactory是线程安全的,表示同一个实例可以被应用的多个线程所共享。
它是重量级的,表示不能随意创建或销毁它的实例。如果应用只访问同一个数据库,则只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例,如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。
SessionFactory是重量级的是因为它有一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。用户可以为SessionFactory配置一个缓存插件,叫二级缓存,用来存放被工作单元读过的数据,将来其他工作单元可能会用到这些数据,因此这个缓存被所有工作单元所共享。一个工作单元通常对应一个事务。
3)Session接口:负责保存,更新,删除,加载,查询对象。
被称作持久化管理器,提供了持久化的相关操作。有如下特点:
线程不安全,要避免多个线程共享一个Session实例。
轻量级。创建和销毁不需要消耗太多的资源,意味着程序中经常创建和销毁Session对象,如为每个客户请求分配单独的Session实例或为每个工作单元分配单独的Session实例。
Session有一个一级缓存,它存放当前工作单元加载的对象,每个Session实例都有自己的缓存,这个Session实例的缓存只能在当前工作单元访问。
4)Transaction接口
是Hibernate的事务接口,它对底层的事务进行了封装,底层事务接口包括:
JDBC
JTA
CORBA API
Hibernate应用通过一致的Transaction接口声明事务边界,有助于应用在不同环境或容器移植。
5)Query和Criteria接口:执行数据库查询
Query和Criteria接口是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例中封装了一个面向对象的HQL语句,它引用类名以及属性名代替表名跟字段名。Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更加面向对象,Criteria接口擅长执行动态查询语句。
事件处理接口:
当程序通过Hibernate来加载,保存,更新或删除对象时,会触发Hibernate的拦截器以及事件监听器做出相应的处理:
事件及事件监听器接口:
在Hibernate API,针对每一种事件都有相应的事件监听器,如加载对象会触发org.hibernate.event.LoadEvent事件,该事件由org.hibernate.event.LoadEventListener监听器处理。。。
org.hibernate.Interceptor接口:
应用程序可以定义实现Interceptor接口的类,Interceptor实现类负责响应持久化类的实例被加载,保存,更新或删除的事件。