ORM进阶之Hibernate 的三大对象

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 我们就可以拿到具体的链接的数据库的对象,对数据库进行操作!

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

时间: 2024-08-03 08:30:11

ORM进阶之Hibernate 的三大对象的相关文章

ORM进阶之Hibernate 的三大对象 如何搭建

我们在上一篇博客中讲到了如何搭建一个Hibernate框架, 提到Hibernate我们就不得不说他的三大对象,Configuration,SessionFactory , Session .下边我们就分别来解释一下这三大对象! Configuration对象 Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例.创建过程Configuration cfg

ORM进阶之Hibernate中对象的三大状态解析

ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一个对象都有三种状态,他们在这三种状态下,Hibernate会他们进行不同的处理.下边我们通过一张图来看一下这三种状态以及他们之间的互相转换! 能够看到对象可能会有这三种状态.暂时状态(transient),持久化状态(persistent).游离状态(detached).下边我们来分别来解释一下这三

ORM进阶之Hibernate中关系映射

ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对一的关系映射 映射可以说是在hibernate中非常重要的一个内容,通过映射可以让程序员不再思考复杂的sql语句,而是更加的专注于业务逻辑的实现.映射通过一个xml配置文件完成并且我们可以对他进行修改!下边我们来看一下如何完成映射的! 单表映射 每个实体对应一张表,跟其他的实体没有关联关系,这是最简

ORM进阶:Hibernate对象的三大状态

简介 Hibernate负责将实体模型,关联到关系模型.那么在程序运行过程中,如何保证实体对象与数据库中的一致性呢? 首先要了解一下Hibernate对象中的三种状态: 三种状态 临时状态(Transient) 持久状态(Persistent) 游离状态(Detached) 状态的含义 临时状态 在程序中第一次使用该对象.(既然是第一次使用实体对象,那么当然数据库中是没有该记录的) 即:实体模型中存在,但是不被Session管理,数据库中没有该记录. 持久状态 当临时状态的对象,执行save()

ORM进阶之Hibernate 简介及框架搭

上一篇博客讲解了ORM思想,以及ORM的优缺点,并说了ORM有很多的实现方式,我们将以Hibernate为基础来进行讲解. Hibernate是一个基于元数据的轻量级的ORM框架: 1,元数据(Meta Data):data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境. 2,轻量级:占用资源少,没有侵入性.(其实我认为这只是相对而言,如果和Ibatis相比,它到成重量级的了). Hibernate分装了对数据库的操作,让我们由面向数据库编程,变为面向

ORM进阶:Hibernate框架搭建及开发

本节将开始,使用hibernate搭建持久层.当然在决定用不用之前,还请斟酌一下是否使用.了解一下Hibernate的优缺点. Hibernate优劣对比 Hibernate是一个持久的ORM框架,首先要简历一个Java Project  这个就不用多说了吧.之后,我们来搭建Hibernate框架. 第一步:引入相关Jar包.包含两部分,核心jar包(Hibernate_Home/hibernate3.jar)和相关包(Hibernate_Home/lib/*.jar) 如上图. 如果没有,请去

【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表

上篇文章说的是每个类映射一张表,不管是父类还是子类.与上篇文章不同的是,这里是每个"具体类"映射一张表,什么意思呢?就是让每个子类(具体的.有意义的类)映射一张表. 场景 与上篇文章场景一样,如下类图 上图中Pig类和Bird类继承Animal类,要让每个具体类映射一张表,就是只映射Pig和Bird,如下表所示: (表 1) 上面的表有个特点就是,t_pig和t_bird的主键永远都不会相同.因为表面上看起来这是两张表,但实际上存储的都是动物(同一类型),所以还可以看做是一张表. 配置

【SSH快速进阶】——Hibernate继承映射:每个类映射一张表

上文说了每棵继承树映射一张表,本文继续描述让每个类都映射一张表的配置. 场景 与上篇文章场景一样,如下类图 上图中Pig类和Bird类继承Animal类,要让每个类映射一张表,就是让着三个类都分别映射一张表,但同时这三张表也跟对应的三个类似的,有继承关系,如下表所示: (表 1) Pig和Bird的记录都表示一个动物,因此都会在Animal对应的表中存储,而它们各自的拓展属性则存储在各自对应的表中,主键与Animal对应记录的主键各自对应. 配置 PO对象 跟上篇文章一样,实体类没有任何变化.

【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表

我们都知道,Hibernate最大的一个优点就是使开发更加"面向对象",类与类之间有继承关系,Hibernate中也对这种继承关系提供了映射的封装. Hibernate为继承映射提供了三种策略 1.每棵继承树使用一张表 2.每个子类使用一张表 3.每个具体类使用一张表 本文对第一种策略进行说明. 场景 如下类图 上图中Pig类和Bird类继承Animal类,每棵继承树对应一张表,即在同一棵继承树中,所有的类的对象信息(记录)共同存放到一张表中,要判断某条记录属于哪个对象,需要在表中添加