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的功能
分享到:
相关推荐
Session是Hibernate中应用最频繁的接口,Session也被称为持久化管理器,它负责所有的持久化工作,负责管理持久化对象的生命周期,提供第一级别的高级缓存来保证持久化对象的数据与数据库同步
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。
Hibernate的五个核心接口 Configuration SessionFactory Session Transcation Query和Criteria
6 Hibernate核心开发接口介绍(重点) ... 风格 1 先脉络,后细节 2 先操作,后原理 3 重Annotation,轻xml配置文件 ... 性能优化 1 注意session.clear()的运用,尤其在不断分页循环的时候 2 1+N问题 ...
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的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面...
本章学习目标 Hibernate 初认识 Hibernate 的HelloWorld hibernate.cfg.xml 配置详解 *.hbm.xml 对象映射文件... Hibernate 核心接口详解 抽取HibernateUtil 工具类 使用Session 接口进行增删改查
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java...Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。
Hibernate是开源的ORM对象关系映射框架,包括Session、SessionFactory、Transaction、Query、Criteria和Configuration六核心类和接口。
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
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应用例子,...
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 编写...
主要知识点包括: 持久实例的生命周期状态 Session接口 Transaction接口 SessionFactory接口 Configuration接口 应用中所需要的JAR类库
3.Hibernate的5个核心类或接口: (1)Configuration:用于解析hibernate.cfg.xml文件和XXXXX.hbm.xml文件,并创建SessionFactory对象。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration...
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 编写...
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 编写...
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中的核心接口