1.1Hibernate的一级缓存

1.1.1Hibernate的一级缓存:

什么是缓存:

缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取.

缓存的好处:

* 提升程序运行的效率.缓存技术是Hibernate的一个优化的手段.

Hibernate分成两个基本的缓存:

* 一级缓存:Session级别的缓存.一级缓存与session的生命周期一致.自带的.不可卸载.

* 二级缓存:SessionFactory级别的缓存.不是自带的.

在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期.

1.1.2证明Hibernate的一级缓存的存在:

@Test// 证明一级缓存的存在public void demo3(){// 1.创建SessionSession session = HibernateUtils.openSession();// 2.开启事务Transaction tx = session.beginTransaction();// save方法可以向一级缓存中存放数据的./*Book book = new Book();book.setName("JQuery开发");book.setAuthor("张XX");book.setPrice(45d);Integer id = (Integer) session.save(book);Book book2 = (Book) session.get(Book.class, id);System.out.println(book2);*/// 分别用get执行两次查询.Book book1 = (Book) session.get(Book.class, 1);// 马上发生SQL去查询System.out.println(book1);Book book2 = (Book) session.get(Book.class, 1);// 不发生SQL,因为使用一级缓存的数据System.out.println(book2);// 3.提交事务tx.commit();// 4.关闭资源session.close();}

1.1.3深入理解一级缓存中快照区:

@Test// 深入理解一级缓存结构:快照区:public void demo4(){// 1.创建SessionSession session = HibernateUtils.openSession();// 2.开启事务Transaction tx = session.beginTransaction();// 获得一个持久态的对象.Book book = (Book) session.get(Book.class, 1);book.setName("Spring3开发");// 3.提交事务tx.commit();// 4.关闭资源session.close();}

结论:向一级缓存存入数据的时候,放入一级缓存区和一级缓存快照区,当更新了一级缓存的数据的时候,事务一旦提交,比对一级缓存和快照区,如果数据一致,不更新,如果数据不一致,自动更新数据库.

1.1.4Hibernate管理一级缓存:

一级缓存是与session的生命周期相关的.session生命周期结束,一级缓存销毁了.

* clear()/evict()/flush()/refresh()管理一级缓存.

* clear():清空一级缓存中所有的对象.

* evict(Object obj):清空一级缓存中某个对象.

* flush():刷出缓存.

* refresh(Object obj):将快照区的数据重新覆盖了一级缓存的数据.

1.1.5Hibernate一级缓存的刷出时机

FlushMode:

* 常量:

* ALWAYS:每次查询的时候都会刷出.手动调用flush.事务提交的时候.

* AUTO:默认值.有些查询会刷出.手动调用flush.事务提交的时候.

* COMMIT:在事务提交的时候,手动调用flush的时候.

* MANUAL:只有在手动调用flush才会刷出.

严格程度:MANUAL > COMMIT > AUTO > ALWAYS

1.2操作持久化对象的方法:

save():

保存一条记录:将瞬时态对象转成持久态对象.

update()

更新一条记录:将脱管态对象转成持久态对象.

在<class>标签上设置select-before-update="true"在更新之前先去查询

saveOrUpdate():

根据对象状态的不同执行不同的save获得update方法.

* 如果对象是一个瞬时态对象:执行save操作.

* 如果对象是一个脱管态对象:执行update操作.

* 设置id不存在,就会报错,可以在<id>上设置一个unsaved-value=”-1”,执行保存的操作.

delete():

将持久态对象转成瞬时态.

get()/load():

获得一个持久态对象.

hibernate教程--一级缓存相关推荐

  1. hibernate教程--一级缓存详解

    1.1 Hibernate的一级缓存 1.1.1 Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获 ...

  2. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

  3. Hibernate之一级缓存和二级缓存

    1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据 ...

  4. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

  5. java中一级缓存_JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  6. hibernate之 一级缓存和二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> 缓存 缓存的实现不仅需要作为物理介质的硬件,同时需要管理缓存的并发访问策略和过期策略的程序(软件).所以缓存通常是通过软件和硬 ...

  7. hibernate教程--二级缓存详解

    Hibernate的二级缓存 一.缓存概述 缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...

  8. Hibernate学习—— 一级缓存快照

    上一篇说到,Hibernate框架中,对象转化为持久化状态后,会在事务提交时,自动将对象属性存储到数据库,而在事务提交之前,我们是对哪里的对象进行操作呢,这就是一级缓存(Session缓存)的作用. ...

  9. hibernate一级缓存_Hibernate缓存–一级缓存

    hibernate一级缓存 Welcome to Hibernate Caching – First Level Cache Example Tutorial. Recently we looked ...

最新文章

  1. mysql root的密码忘了?linux下重置mysql的root用户密码。
  2. 服务器里这么修改404页面,网站404页面怎么做
  3. python建立列表_python创建列表和向列表添加元素的实现方法
  4. RxSwift之常用高阶函数(操作符Operator)的说明和使用
  5. liferay如何debug
  6. rxjs of操作符生成的Observable对象的执行详细分析
  7. textarea支持a标签_微慕小程序开源版A标签优化说明
  8. MFCButton Memory leak(内存泄露问题)
  9. centOS安装oracleDB,静默安装DBCA的时候,报错
  10. libpcap中主要函数使用介绍
  11. paip.自适应网页设计 跟 响应式 设计方法与工具补充(2)o54
  12. 中国移动路由器怎么设置虚拟服务器,中国移动宽带无线wifi设置方法【图】
  13. 九月手机无新事:头部品牌没创新,二三线品牌静悄悄
  14. matplotlib.pyplot 标记出曲线上最大点和最小点的位置
  15. 微观经济学之供给与需求--第一章第二章
  16. 智慧井盖安装注意事项
  17. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)
  18. [转]完美解决图片/链接虚线边框
  19. 2018华为暑假实习面试
  20. java读取hadoop数据_从Hadoop URL中读取数据_hadoop 数据读取_hadoop读取文件

热门文章

  1. 很久没写东西了,留个言。
  2. nrf51822蓝牙学习笔记之实例分析PPI和SHORT
  3. Qt之QByteArray类学习
  4. ef mysql 时间_关于c#:EF6和MySQL时区支持
  5. 输出apk_KT被横扫吞下五连败果 APK拿下首胜 小夫笑得十分开心
  6. 文本挖掘预处理:向量化与Hash Trick
  7. 设计模式总结 (3)创建内存型模式
  8. Bitcoin代码中的Boost signals(1)
  9. [密码学] 高级加密标准AES
  10. 设计模式--桥(Bridge)模式