Hibernate入门(三)之hibernate 的session的缓存机制

session缓存

缓存的生命周期

当打开session以后,该缓存就开始了,当session关闭以后,该缓存不存在,其生命周期和session的生命周期是一样的

如何将数据存放到缓存中

get方法
session.get方法可以把一个对象放入到session的缓存中,以主键标识该对象,所以我们把这样的主键也叫oid

save方法

Session.save方法可以把对象放入到缓存中

update方法

session.update方法把对象放入到了session缓存中

如何测试缓存中是否有数据

说明:可以利用session.getStatistics()方法统计出放入到session缓存中的对象的个数

如何清除缓存中的数据

clear方法(清除所有的缓存数据)

evict方法(清除指定的缓存数据)

close方法(清除所有的缓存数据)

session关闭,缓存也就不存在了,session中的数据也就被清除了

不同的session

说明:

103行的代码中的session和107行代码中的session是完全不一样的

也就是说每次用factory.opensession这个session都是不一样的

如何将数据库中的数据同步到缓存中

当执行117行代码的时候,发出了sql语句 session.get方法

当执行119行代码的时候,又发出了sql语句 session.refresh

把数据库中的数据同步到缓存中

如何将缓存中的数据同步到数据库中

Session.flush方法会去检查session缓存中各个对象的状态,如果该对象由临时状态转换过来的(没有主键值),则会让该对象生成一条insert语句,如果该对象有主键值,则会对照副本,决定是否发出update语句。当事务提交的时候,如果不显式的写session.flush的情况下,这个时候hibernate内部会默认的执行session.flush。

缓存的意义1

传统从数据库中获取数据的做法

这样每次获取一次数据都要从数据库中获取,这样的效率很低下,但如果使用缓存机制的话就不一样了

说明:
 在内存区域中,有一个对象Map<String,List<T>>,key值为sql语句,value值为该sql语句执行的结果,在客户端发出一个sql语句:
1、先从map中检查是否key值和该sql语句一样
2、如果一样,则从map提取数据,和数据库没有关系
3、客户端从map中得到相应的数据
4、第二步,如果不一样,则从数据库中查询
5、把查询出来的结果缓存到map中
6、把结果返回到客户端一份

缓存的意义2

Session的缓存提供了存放对象的容器,在这个容器中可以对对象随意操作,但是在执行session.flush的时候,hibernate内部会根据每一个对象的状态来决定发出insert语句还是update语句。这样在整个过程中,和数据库只交互一次,通过这样的方式可以提高效率

时间: 2024-10-05 12:43:30

Hibernate入门(三)之hibernate 的session的缓存机制的相关文章

Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装

Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装 你们可以直接去,http://blog.csdn.net/wei_chong_chong/article/details/52979683,楼主写的挺好的. 自己心得: Hibernate装了好久都装不上去,不是安装过程出了问题,原来是下载的那些软件根本就不对,虽然都有hibertane的英文,但是具体名称要看懂啊,最好做到和视频里面一模一样.

Hibernate入门(四)之hibernate中session的创建方式

为什么要专注于session的创建方式 在有些场景必须关注session的创建,比如说在银行转账操作的时候,两个账户转账必须在同一个session中 如上面所示,账户1钱没了,账户2钱却没有到,原因就在于两者不再同一个事务当中,不能实现事务的回滚. getCurrentSession 说明: 1.产生方式的说明 1.先检查当前线程中是否有session 2.如果当前线程中有session,则把session提取出来,直接使用 3.如果当前线程中没有session,则采用openSession方法

java web开发入门三(Hibernate)基于intellig idea

Hibernate 1.开发流程 项目配置好后的结构: 1.下载源码: 版本:hibernate-distribution-3.6.0.Final 2.引入hibernate需要的开发包(3.6版本),如果没有引用成功,在jar包上右键执行:add as library 3.编写实体对象及对象的映射xml文件 实体类: package com.eggtwo.test; import java.util.Date; public class Student { private int id; pr

Hibernate入门篇&lt;1&gt;hibernate.cfg.xml学习小结

Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中.Hibernate配置文件支持两种形式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,采用"键=值"的形式.建议采用xml格式的配置文件,xml配置文件可以直接对映射文件进行配置,并由Hibernate自动加载,而properties文件则必须在程序中通过编码加载映射文件. 一)hibernate配置文件模

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过Session持久化操作,缓存中存在这个对象的数据为持久状态并且数据库中存在这个对象对应的数据为持久状态这个时候有OID. 游离状态:当Session关闭,缓存中不存在这个对象数据而数据库中有这个对象的数据并且有OID为游离状态. 注:OID为了在系统中能够找到所需对象,我们需要为每一个对象分配一个

hibernate入门三之关联映射(一对多和多对一)

提示:本文的操作是在入门一和二上面的 hibernate对映射类型 在开始是学习的时候,我以为一对多和多对一是同样的,后来发现不是这样,比如说班主任和班级里的学生,一个班级可能有多个学生,但是只有一个班主任,学生和班主任的关系是多对一,班主任和学生的关系是一对多,两者之间的区别在于它们的指向性 一对一(one-to-one ) 一对多(ont-to-many) 多对一(many-to-one) 多对多(many-to-many) 一对多(ont-to-many)和多对一(many-to-one)

Hibernate入门学习-安装hibernate插件

最近一直在学习ssh框架,为了更方便hibernate的使用,所以在eclipse下载hibernate插件,安装插件有两种方法 第一种:本地安装 1).插件的官网下载地址:http://tools.jboss.org/downloads/,选择你要安装的插件,如图所示: 2).打开eclipse->help->Install New Software->Add 3).选择你需要要安装的插件.不要勾选更新,否则需要联网下载,然后一直next就好了! 第二种:在线安装: Help >

Hibernate 入门 04 - Hibernate中Java对象的三种状态

目录:(后续不断更新...) Hibernate 入门 01 - 框架技术 (介绍Hibernate框架的发展由来) Hibernate 入门 02 - Hibernate介绍及其环境搭建 Hibernate 入门 03 - 使用Hibernate完成持久化操作 Hibernate 入门 04 - Hibernate中Java对象的三种状态 ▁▃▅ Hibernate中Java对象的三种状态▅▃▁ 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久

转载!!!Hibernate中Session的缓存及对象的状态

对于session这个接口的学习可以说是最痛苦也是最复杂的,因为它所涉及的方面太多了,一些隐藏的机制也很多,谁让它是Central API呢. 对于它的几个最基本的方法如save().delete().flush()等的学习都花了我一定的时间.在深入了解这些这些方法前,了解session的缓存机制以及Hibernate中Java对象的状态对我们是很有帮助的. 一.Session的缓存 Java是纯面向对象的语言,因此不可能像C语言那样直接操纵内存,例如声明一段可用的内存空间.在Java里面,缓存