Hibernate核心接口

Hibernate作为持久层中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以学习Hibernate,自然应该先从接口开始了。

Hibernate有五大核心接口,分别是:Session Transaction QuerySessionFactoryConfiguration 。这五个接口构成了Hibernate运行的基本要素,可以执行存取,持久化,事务管理等操作。这五个接口可以位于系统的业务逻辑层和持久化层。下面是一张Hibernate的关系图:

 

 

1、Session接口

从SessionFactory中可以获得Session实例。

Session接口是Hibernate应用中使用最广泛的接口了,对于Hibernate开发人员来说是一个最重要的接口。它是持久化管理器,负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。),提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例,最好是一个线程只创建一个Session对象。同时,Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。Hibernatesession不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session

session可以看作介于数据连接与事务管理一种中间接口。Session有一个缓存,我们可以将session想象成一个持久对象的缓冲区,称之为Hibernate的一级缓存,它存放当前工作单元加载的持久化对象,每个Session都有自己的缓存,缓存中的对象只能被当前工作单元访问。Hibernate能检测到这些持久对象的改变,并及时刷新数据库。


2、Transaction接口

Transaction是Hibernate的数据库事务接口,它对底层的事务接口进行了封装,底层事务接口包括:

   JDBC API

   JTA(Java Transaction API)

   CORBA(Common Object Requet Broker Architecture) API

Hibernate应用可以通过一致Transaction接口来声明事务边界,这有助于应用可以在不同的环境或容器中移植。具体的事务实现使用在Hibernate.properties中进行指定。

Transaction 接口负责事务相关的操作。它是可选的,可发人员也可以设计编写自己的底层事务处理代码。

Transaction接口负责事务相关的操作,一般在Hibernate的增删改中出现,但是使用Hibernate的人一般使用Spring去管理事务。


3、Query接口

Query负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。它的返回值一般是List。需要自己转换。Query实例包装了一个HQL(HibernateQuery Language)来查询。

另Criteria接口

Criteria接口完全封装了基于字符串形式的查询语句,比Query更面向对象,Criteria更擅长执行动态查询。


4、SessionFactroy接口

SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

SessionFactroy 接口负责初始化 Hibernate 。它充当数据存储源的代理,并负责创建 Session 对象。这里用到了工厂模式。需要注意的是 SessionFactory 并不是轻量级的,因为一般情况下,一个项目通常只需要一个 SessionFactory 就够,当需要操作多个数据库时,可以为每个数据库指定一个 SessionFactory

一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。它是线程安全的,同一个实例可以被应用中的多个线程共享。

SessionFactory为什么是重量级对象呢?因为SessionFactory存放了大量预定义的SQL语句以及映射元数据,所以自然需要很大的缓存了,同时需要一定的CPU时间来计算生成。想想Hibernate的这个设计是很有意义的,因为有了Mapping文件,很多SQL语句就已经确定了,只需要动态生成一次就可以了,这个设计也是为了提高持久化的效率。


5、Configuration接口

Configuration用于配置并启动Hibernate,创建SessionFactory对象。Hibernate应用通过Configuration的实例来指定对象-关系映射文件,定位映射文档位置、读取配置,或通过Configuration动态配置Hibernate的属性,然后通过Configuration来创建相应的SessionFactory实例。

我们可以查看Configuration的源代码,它的configure()方法是这样实现的:

 

  1. public Configuration configure() throwsHibernateException {  
  2.        configure("/hibernate.cfg.xml" );//此处指定了ORM文件的位置  
  3.        return this;  
  4.    }  

 

我们看到它是在这里指定了ORM文件的位置,这就是为什么Hibernate总是默认到classpath下去寻找hibernate.cfg.xml文件的原因了。实际上我们还可以通过configure(Stringresource)来动态的指定配置文件,只不过通常我们都是采用的默认设置罢了。这样的话我们的配置文件就都被读取了,同时配置文件中通过<mapping>元素引入的映射文件也被读取了。


Hibernate运行过程:

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();//创建SessionFactory

4.sessionFactory.openSession();//打开Sesssion

5.session.beginTransaction();//创建事务Transation

6.persistentoperate持久化操作 //一般指Save这个方法

7.session.getTransaction().commit();//提交事务

8.关闭Session

9.关闭SesstionFactory









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值