码迷,mamicode.com
首页 > Web开发 > 详细

ORM进阶之Hibernate 的三大对象

时间:2015-08-17 23:45:15      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:hibernate   session   sessionfactory   configuration   orm   

       ORM进阶之 ORM简介

        ORM进阶之Hibernate 简介及框架搭

        ORM进阶之Hibernate 的三大对象

        

        我们在上一篇博客中讲到了如何搭建一个Hibernate框架, 提到Hibernate我们就不得不说他的三大对象,Configuration,SessionFactory , Session 。下边我们就分别来解释一下这三大对象!

Configuration对象

       Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例。创建过程 Configuration cfg =new Configuration().configure();   我们也可以在configure()方法中指定hbm.xml文件的路径。

SessionFactory对象

        SessionFactory 顾名思义,他是创建session的工厂,用来创建session对象,令你感到奇怪的是SessionFactory并不是轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。  

       SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。  

       一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。

       SessionFactory的缓存可分为两类:内置缓存和外置缓存。

       SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同时也缓存了Hibernate自动生成的SQL语句等;

        SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存能存放大量数据库数据的拷贝,外置缓存的物理介质可以是内存或者硬盘

Session对象

Session对象的简介

       Session接口对于Hibernate   开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但值得注意的是 Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。  

   

     在Hibernate的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate   的session不同于JSP应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate中的session,而我们以后会将HttpSesion对象称为用户session。 

如何获得Session对象

       首先创建SessionFactory对象应用服务器如果访问多个数据源时,则应该产生多个SessionFactory;但是仅仅为了服务与某个请求时,不要创建一个新的SessionFactory,因为创建SessionFactory需要消耗大量的资源.然后根据SessionFactory再创建Session对象 创建session对象有两种方式,分别是openSession()和getCurrentSession(),openSession,打开需要关闭,但是getCurrentSession 是不需要关闭的,他会自动的关闭!

<span style="font-size:18px;">Session session=sessionFactory.openSession();

Transaction tx;
try{
    tx=session.beginTransaction();//开始一个事务
   .......//执行事务
   tx.commit(); 
}catch(Exceptione){//如果出现异常就撤消事务
   if(tx!=null)
       tx.rollback();
   throw e;
}
Finally{  //不管事务执行成功与否,最后都关闭Session并且放在finally中以提高安全性
    session.close();
}</span>

       我们先通过configuration 读取数据库的一系列的配置文件,然后通过这一系列的配置信息,创建一个创建数据库连接的工厂SessionFactory,然后通过SessionFactory 我们就可以拿到具体的链接的数据库的对象,对数据库进行操作!

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

ORM进阶之Hibernate 的三大对象

标签:hibernate   session   sessionfactory   configuration   orm   

原文地址:http://blog.csdn.net/zhanghongjie0302/article/details/47733321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!