首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据。

1 //从session创建开始,一级缓存也跟着创建
2 Session session = HibernateSessionFactory.getSession();
3 ...
4 //到session关闭,一级缓存  
5 session.close();

一级缓存的执行流程:

如果现在需要获得一个数据库里面的账号为“980517”的用户,执行Java代码

1 User user = (User)session.get(User.class,"980517")

这时底层并不是直接执行sql语句,而是先到缓存区去找,如果找不到账号为“980517”的用户,那么才会去执行sql语句,并把它放到缓存区中去,;如果在缓存区中找到了,就不会执行sql语句了(这就是优点:减少了操作数据库的次数),直接返回这个User对象。下面来粗略得看一看这部分的源码:

 1 //数据加载一般都是在doLoad中完成,不仅仅是get()这个方法
2 protected final T doLoad(Serializable id) {
3 if ( this.lockOptions != null ) {//这个if就是去缓存区中去找,如果找到了,就带着数据直接return
4 LoadEvent event = new LoadEvent( id, entityPersister.getEntityName(), lockOptions, SessionImpl.this );
5 fireLoad( event, LoadEventListener.GET );
6 return (T) event.getResult();
7 }
8
9 LoadEvent event = new LoadEvent( id, entityPersister.getEntityName(), false, SessionImpl.this );
10 boolean success = false;
11 try {
12 fireLoad( event, LoadEventListener.GET );
13 success = true;
14 }
15 catch (ObjectNotFoundException e) {
16 // if session cache contains proxy for non-existing object
17 }
18 finally {
19 afterOperation( success );
20 }
21 return (T) event.getResult();
22 }

一级缓存的特性:持久态可以直接更新数据库。

说这个特性之前提一个概念:快照区(副本,保留最开始的数据)

比如上面的User,它不仅会在一级缓存区存一份,也会在快照区存一份,当对User这个对象执行set方法来改变它的属性时,缓存区会跟着修改,但是快照区不会修改,这就会出现不一致的情况。当程序最后执行commit()方法提交事务的时候,它会比较缓存区和快照区,如果快照区的数据(也就是最开始的数据)和一级缓存区的数据不一致时,他就会执行一个更新的操作来更新数据库。这就意味着我们可以用先get后set的方式来取代hibernate中update更新数据库的方式。

如果理解有误还请斧正,感谢。

hibernate中的一级缓存与闪照区的更多相关文章

  1. Hibernate中的一级缓存、二级缓存和懒加载(转)

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  2. Hibernate中的一级缓存、二级缓存和懒加载

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  3. Hibernate中延迟加载和缓存

    什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象 访问 ...

  4. 在Spring、Hibernate中使用Ehcache缓存(2)

    这里将介绍在Hibernate中使用查询缓存.一级缓存.二级缓存,整合Spring在HibernateTemplate中使用查询缓存.,这里是hibernate3,使用hibernate4类似,不过不 ...

  5. Hibernate入门(四)---------一级缓存

    Hibernate一级缓存 Hibernate的一级缓存就是指Session缓存,Session缓存是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先会使用对 ...

  6. Hibernate事务以及一级缓存02

    一. Hibernate中的事务 1. 事务的回顾 1.1 什么是事务(Transaction)(面试重点) 是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的 ...

  7. Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录 1.二级缓存的具 ...

  8. 具体解释Hibernate中的二级缓存

    1.前言 这篇博客再前几篇博客的基础上来解说一下.Hibernate中的二级缓存.二级缓存是属于SessionFactory级别的缓存机制. 第一级别的缓存是Session级别的缓存,是属于事务范围的 ...

  9. 【MyBatis学习12】MyBatis中的一级缓存

    缓存的作用是减轻数据库的压力,提高数据库的性能的.mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图:   从图中可以看出: 一级缓存是SqlSession级别的缓存.在操作数据库时 ...

随机推荐

  1. 造轮子-strace(一)

    见字如面,我是东北码农. 本文是造轮子-strace的第一篇,我们先介绍strace的功能.使用.下一篇我们来用代码实现一下strace的功能,造个轮子.今天我们先观察.使用轮子. 1.什么是stra ...

  2. HTML5 +Java基础 大一结业认证考试试题 - 云南农业职业技术学院 - 互联网技术学院 - 美和易思校企合作专业

     第1题 [单选题][0.33分][概念理解] 关于java中的逻辑运算符,下列说法正确的是 逻辑运算符||.&&.!都是用于连接两个关系表达式</p> 当&&am ...

  3. 编写Java程序,创建Dota游戏中的防御塔类,通过两个坐属性显示防御塔所在的位置

    返回本章节 返回作业目录 需求说明: 创建Dota游戏中的防御塔类 通过两个坐属性显示防御塔所在的位置 实现思路: 创建防御塔(TowerDefense)类 在该类中定义了两个属性,分别是int类型横 ...

  4. Android 悬浮窗 System Alert Window

    悬浮窗能显示在其他应用上方.桌面系统例如Windows,macOS,Ubuntu,打开的程序能以窗口形式显示在屏幕上. 受限于屏幕大小,安卓系统中主要使用多任务切换的方式和分屏的方式.视频播放,视频对 ...

  5. centos6.5-搭建Apache

    准备工作 1.关闭防火墙 service iptables stop 2.关闭selinux安全机制 setenforce 0 3.卸载rpm格式的httpd 这说明已经安装了rpm格式的软件包.所以 ...

  6. Java 单引号 与 双引号 区别

    双引号,用来引用字符串, 单引号用来表示单个字符.

  7. HTTP 408 问题 - Koa body parser

    环境描述: 1.nodejs 作为 api 服务器,转发请求给 nginx 2.用 curl 测试,返回 408 找了很久没有找到原因,发现了一篇文章: https://lujunda.cn/2016 ...

  8. SQL高级优化(二)之MySQL架构

    一.架构 想要学好SQL优化就必须从对应数据库的基本架构开始学习 架构图如下 二.架构分析 1. 连接管理与安全验证 ​     MySQL有连接池(Connection Pool)管理客户端的连接. ...

  9. 解决maven每次更新都编程java1.5

    Maven: 每次更新Maven Project ,JAVA 版本都变为1.5 本文转载自:http://www.cnblogs.com/Hxinguan/p/6132446.html 问题: 1.创 ...

  10. vivo推送平台架构演进

    本文根据Li Qingxin老师在"2021 vivo开发者大会"现场演讲内容整理而成.公众号回复[2021VDC]获取互联网技术分会场议题相关资料. 一.vivo推送平台介绍 1 ...