Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。
(1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration实例来指定对象--关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
(2)SessionFactory:初始化Hibernate,充当数据存储源的代理,创建Session对象。一个SessinFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。如果应用同时访问多个DB,怎需要为每个数据库创建一个单独的SessionFactory实例。
(3)Session:也被称为持久化管理器,对象级数据库操作。
特点:
1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
2)Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单位分配单独的Session实例。
3)通常将每一个Session实例和一个DB事务邦定,也就是说,每执行一个DB事务,都应该先创建一个新的Session实例,不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。
注:每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前的工作单元访问。
(4)Query:执行数据库查询操作。要使用HQL(HibernateQueryLanguage)查询语句,HQL查询语句是面向对象的,它引用类名及类的属性名。
(5)Transaction:用于管理操作事务。它对底层的事务接口做了封装,底层事务接口包括:JDBC API、JTA(JavaTransactionAPI)、CORBA(CommonObjectRequestBroker Architecture)API。
3.Hibernate的5个核心类或接口:
(1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration实例来指定对象--关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
(2)SessionFactory:初始化Hibernate,充当数据存储源的代理,创建Session对象。一个SessinFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。如果应用同时访问多个DB,怎需要为每个数据库创建一个单独的SessionFactory实例。
(3)Session:也被称为持久化管理器,对象级数据库操作。
特点:
1)不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
2)Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单位分配单独的Session实例。
3)通常将每一个Session实例和一个DB事务邦定,也就是说,每执行一个DB事务,都应该先创建一个新的Session实例,不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。
注:每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前的工作单元访问。
(4)Query:执行数据库查询操作。要使用HQL(HibernateQueryLanguage)查询语句,HQL查询语句是面向对象的,它引用类名及类的属性名。
(5)Transaction:用于管理操作事务。它对底层的事务接口做了封装,底层事务接口包括:JDBC API、JTA(JavaTransactionAPI)、CORBA(CommonObjectRequestBroker Architecture)API。
二、工作原理
1.Hibernate 的初始化.
读取Hibernate 的配置信息-〉创建Session Factory
1)创建Configeration类的实例。
它的构造方法:将配置信息(Hibernate config.xml)读入到内存。
一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。
2)创建SessionFactory实例
把Configeration 对象中的所有配置信息拷贝到SessionFactory的缓存中。
SessionFactory的实例代表一个数据库存储员源,创建后不再与Configeration 对象关联。
缓存(cache):指Java对象的属性(通常是一些集合类型的属性--占用内存空间。
SessionFactory的缓存中:Hibernate 配置信息。OR映射元数据。
缓存-大:重量级对象 小:轻量级对象
3)调用SessionFactory创建Session的方法
1】用户自行提供JDBC连接。
Connection con=dataSource.getConnection();
Session s=sessionFactory.openSession(con);
2】让SessionFactory提供连接
Session s=sessionFactory.openSession();
4)通过Session 接口提供的各种方法来操纵数据库访问
在hibernate的启动过程中,configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个sessionfactory对象。 sessionfactory 接口 |- 这里用到了一个设计模式――工厂模式,用户程序从工厂类sessionfactory中取得session的实例.sessionfactory并不是轻量级的,一个项目通常只需要一个 sessionfactory就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个sessionfactory。 sessionfactory在hibernate中实际起到了一个缓冲区的作用,它缓冲了hibernate自动生成的sql语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。 session接口 |- session接口对于hibernate 开发人员来说是一个最重要的接口。然而在hibernate中,实例化的session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁session对象,如果session的开销太大,会给系统带来不良影响。但值得注意的是 session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个session对象。 hibernate使用session来存取,它是持久化管理器接口,代表与数据库之间的一次操作。然而为了操作持久化数据,首先要获得sessionfactory对象,sessionfactory负责一个数据库,是session的工厂,对于一个xml配置文件,sessionfactory对象configuration对象负责创建。这里的net.sf.hibernate.cfg.configuration的一个实例代表了应用程序中所有的java类到关系数据库的映射的集合,这些映射是从一些xml映射文件中编译得到的。可以得到一个configuration的实例,直接实例化即可,当所有的映射都被configuration解析之后,应用程序为了得到session实例,必须先得到它的工厂,这些工厂应该是应用程序的所有线程所共享的。当然hibernate并不禁止程序实例化多个sessionfactory,这在使用不止一个数据库时候就很有用。 transaction 接口 |- transaction接口是一个可选的api,你可以选择不使用这个接口,取而代之的是hibernate的设计者自己写的底层事务处理代码。 transaction接口是对实际事务实现的一个抽象,这些实现包括jdbc的事务、jta中的usertransaction、甚至可以是corba 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。 query和criteria接口 |- query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:hql语言或本地数据库的sql语句。query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。 criteria接口与query接口非常类似,它允许你创建并执行面向对象的标准化查询。值得注意的是query接口也是轻量级的,它不能在session之外使用。 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,callback接口会通知hibernate去接收一个通知消息。一般而言,callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....