`
yaasshole
  • 浏览: 666558 次
文章分类
社区版块
存档分类
最新评论

Hibernate的核心接口--- Session

 
阅读更多

Hibernate的核心接口--- Session

一 Session简单介绍

1.session概念

Session是Hibernate中应用最频繁的接口,Session也被称为持久化管理器,它负责所有的持久化工作,负责管理持久化对象的生命周期,提供第一级别的高级缓存来保证持久化对象的数据与数据库同步

2.Session的特点

(1)单线程,非共享的对象。线程不安全,在设置软件架构时,应该避免多个线程共享一个Session实例

(2)Session实例是轻量级的,它的创建和销毁不需要消耗太多的资源,可以为每次请求分配一个Session实例,在每次请求过程中及时创建和销毁Session实例。

(3)Session有一个缓存,它存放当前工作单元加载的对象,session缓存被称为Hibernate第一个缓存。

3.Session缓存

Java中,缓存通常是指java对象的属性占用的内存空间,一般使用集合类型的属性来作为缓存。Session这一级别的缓存通常称之为一级缓存,是由它的实现类SessionImpl中的成员属性persistenceContext中定义的一系列java集合属性构成的。

当应用程序调用Session的CURD方法以及调用查询接口的list(),iterati()或filter()方法时,如果在缓存中不存在相应的对象,Hibernate就会把该对象加入到一级缓存中,如果在Sessoin缓存中已经存在这个对象,就不需要再去数据库加载而是直接使用缓存中的这个对象,可以减少访问数据库的频率,提高程序运行的效率。当Session在清理缓存时,Hibernate会自动进行脏数据检查,根据缓存中的对象的状态变化来同步更新数据库。

在利用Session进行持久化操作时,当调用Transaction的commit()事务提交方法时,会自动进行缓存清理同步数据库

Session接口提供了几个跟缓存相关的方法

(1)flush()刷新缓存,它与事务提交commit()方法有不同之处,flush()进行缓存的清理,执行一系列的SQL语句,但是不会提交事物,而commit()方法会先调用flush()方法,然后再提交事物。

(2)setFlushMode()可以自定义设置清理缓存的时间点

(3)getFlushMode()获取当前缓存清理的模式

二 持久化生命周期

1.瞬时状态(tansient)

该实例是刚用new语句创建的,还没有被持久化,不处于任何Session的缓存,它没有对象标识符值(主键值)

特点:不跟任何一个Session实例关联,在数据库中没有对应的记录

2.持久化状态(persistent)

已经被持久化,加入到Session缓存中,实例目前与某一个Session有关联,它拥有对象标识符,并且可能在数据库中有一个对应的行,Hibernate保证在同一个Session实例的缓存中,数据库中的每一条记录只对应唯一的一个持久化实例

特点:持久化对象总是被一个Session实例关联。持久化实例和数据库中相关的记录对应,Session在清理缓存时,会根据持久化实例的属性数据变化,同步更新数据库。

3.脱管状态(detached)

已经被持久化过,但已经不处于Session的缓存中,实例曾经与某个Session上下文发生过关联,不过那个上下文已经被关闭,它拥有对象标识符值,并且在数据库中可能存在一个对应的行

特点:不再位于Session的缓存中,即它不再和Session关联,但它拥有对象标识符值。


三 Session的基础操作

1.save()方法:持久化给定的瞬时实例,并返回该实例的对象标识符值

当调用save()方法时,它会完成以下操作:

(1) 把瞬时对象加入到当前Session的缓存中,使它变成持久化对象。

(2) 选用映射文件指定的主键生成器为此持久化对象分配唯一的OID。

(3) 计划执行一个insert语句,把此持久化对象的当前属性值组装到insert语句中,只有当session清理缓存时,才会执行SQL insert语句。如果在save方法之后修改了持久化对象的属性值,Session清理缓存时会额外执行 SQL update语句

2.get()方法:根据给定的OID返回一个持久化实例

get方法先检查当前的Session缓存中是否存在这个标识符的持久化实例,如果存在就直接返回,如果不存在就检查二级缓存中是否存在,如果存在就直接返回,如果不存在,就从数据库中获取数据返回,如果数据库表中不存在就返回null。

3.load()方法:根据给定得到OID返回一个持久化对象

load()方法先检查当前Session缓存中是否存在这个标识符值的持久化实例,如果存在直接返回,如果不存在,就检查二级缓存中是否存在,如果存在就直接返回,如果还不存在,Hibernate框架不检查数据库是否存在这个标识符的记录,而是会直接创建一个代理对象并返回,这个代理对象只包含标识符值,并没有其他属性的实际数据,这种方式就是懒加载。

注意:必须在session未关闭时进行

4.delete():把指定的持久化实例变成瞬时状态,并从数据库表中移除对应的记录。

如果传入的实例是持久化状态,Session就计划执行一个delete语句

如果传入的实例是脱管状态的,就先让它和当前Session关联转变为持久化对象,再计划执行一个delete语句

5.update():重附脱管对象,并把它的状态更新到数据库表中

把脱管对象加入到当前Session的缓存中,使得他变成持久对象

计划执行一个update语句,只有当Session清理缓存时,才会执行SQL update语句

6.saveOrUpdate():同时具有save和update的功能

分享到:
评论

相关推荐

    hibernate的核心接口--Session

    Session是Hibernate中应用最频繁的接口,Session也被称为持久化管理器,它负责所有的持久化工作,负责管理持久化对象的生命周期,提供第一级别的高级缓存来保证持久化对象的数据与数据库同步

    Hibernate核心接口

    Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。

    Hibernate的五个核心接口介绍.png

    Hibernate的五个核心接口 Configuration SessionFactory Session Transcation Query和Criteria

    马士兵hibernate学习笔记(原版)

    6 Hibernate核心开发接口介绍(重点) ... 风格 1 先脉络,后细节 2 先操作,后原理 3 重Annotation,轻xml配置文件 ... 性能优化 1 注意session.clear()的运用,尤其在不断分页循环的时候 2 1+N问题 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类...

    Hibernate体系结构的概要图

    Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...

    Hiberante中的五大核心接口.txt

    Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面...

    Hibernate5快速学习步骤

    本章学习目标  Hibernate 初认识  Hibernate 的HelloWorld  hibernate.cfg.xml 配置详解  *.hbm.xml 对象映射文件... Hibernate 核心接口详解  抽取HibernateUtil 工具类  使用Session 接口进行增删改查

    hibernate4.3完整jar包

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java...Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

    hibernate-3.2完整源码包和4.x模块(ogm、search、validator等)版本包.txt

    Hibernate是开源的ORM对象关系映射框架,包括Session、SessionFactory、Transaction、Query、Criteria和Configuration六核心类和接口。

    hibernate api

     Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

    精通hibernate:对象持久化技术孙卫琴第二版part2

    2.4.1 Hibernate的核心接口 39 2.4.2 事件处理接口 41 2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    Hibernate核心API

    主要知识点包括: 持久实例的生命周期状态 Session接口 Transaction接口 SessionFactory接口 Configuration接口 应用中所需要的JAR类库

    hibernate精华教程

    3.Hibernate的5个核心类或接口: (1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.2 Hibernate的核心 12.2.1 Configuration(配置Connection) 12.2.2 SessionFactory(Connection工厂) 12.2.3 Session(提供Connection) 12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写...

    精通Hibernate:对象持久化技术第二版part3

    2.4.1 Hibernate的核心接口 39 2.4.2 事件处理接口 41 2.4.3 Hibernate映射类型接口 41 2.4.4 可供扩展的接口 42 2.5 小结 43 2.6 思考题 45 第3章 第一个Hibernate应用 47 本章通过简单的helloapp应用例子,...

    Hibernate介绍

    讲述了Hibernate的由来,优缺点,以及Hibernate中的核心接口

Global site tag (gtag.js) - Google Analytics