数据源:文件和数据库。从内存中获取,不用去数据库发送SQL语句查询了。缓存技术是hibernate的一个优化的手段。Session结束了,一级缓存就没了,就销毁了。SeesionFactory没了,二级缓存就没了,就销毁了。通常它是可以在多个session中共享数据的。一级缓存是自带的,不可卸载的。默认二级缓存是不开启,二级缓存不是自带的,可以卸载的,要使用它还要经过一系列的配置才可以使用。默认开启的是一级缓存。


这些Java集合构成了一级缓存。一级缓存是Session中那一系列的集合,而且Session没结束,一级缓存就存在。Session结束了,一级缓存就没有了。session.save()往一级缓存放一份数据,get()和load()方法不会再去发SQL查询数据库。


  1. package cn.itcast.hibernate3.demo1;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import org.hibernate.Session;
  6. import org.hibernate.Transaction;
  7. import org.junit.Test;
  8.  
  9. import cn.itcast.utils.HibernateUtils;
  10.  
  11. /**
  12. * Hibernate的测试类
  13. *
  14. * @author zhongzh
  15. *
  16. */
  17.  
  18. public class HIbernateTest1 {
  19. @Test
  20. //证明一级缓存的存在
  21. public void demo3(){
  22. //1.创建Session
  23. Session session = HibernateUtils.openSession();
  24. //2.开启事务
  25. Transaction tx = session.beginTransaction();
  26.  
  27. //save方法可以向一级缓存中存放数据的.
  28. /* Book book = new Book();
  29. book.setName("JQuery开发");
  30. book.setAuthor("张XX");
  31. book.setPrice(45d);
  32.  
  33. Integer id = (Integer)session.save(book);
  34. Book book2 = (Book)session.get(Book.class,id);//get一执行,马上会发一条SQL语句去执行
  35. //但是现在不会了,因为它可以从一级缓存中获取数据
  36. */
  37.  
  38. //分别用get执行两次查询.如果使用JDBC的话,执行两次查询它就发两次SQL语句
  39. Book book1 = (Book)session.get(Book.class,1);//马上发SQL去查询 get()它可以使用一级缓存的数据 而你在第一次使用get()的时候它可以向一级缓存存放数据
  40. System.out.println(book1);
  41. Book book2 = (Book)session.get(Book.class,1);//不发SQL,因为使用一级缓存的数据
  42. System.out.println(book2);
  43. System.out.println(book2);
  44. //3.提交事务
  45. tx.commit();
  46. //4.关闭资源
  47. session.close();
  48.  
  49. }
  50. @Test
  51. //测试持久态的对象自动更新数据库(因为它依赖了hibernate的一级缓存区域)
  52. public void demo2() {
  53. //1.创建Session
  54. Session session = HibernateUtils.openSession();
  55. //2.开启事务
  56. Transaction tx = session.beginTransaction();
  57.  
  58. //获得一个持久态的对象
  59. Book book = (Book) session.get(Book.class, 1);
  60. book.setName("Struts2开发3");//现在不用update(book)也可以自动完成数据库的更新
  61. //没有手动调用update()方法也可以完成数据库的更新
  62.  
  63. //session.update(book);//之前是update(book)才能完成修改
  64.  
  65. //3.提交事务
  66. tx.commit();
  67. //4.关闭资源
  68. session.close();
  69. }
  70. @Test
  71. //区分持久化对象的三种状态:
  72. public void demo1() {
  73. // 1.创建Session
  74. Session session = HibernateUtils.openSession();
  75. // 2.开启事务
  76. Transaction tx = session.beginTransaction();
  77.  
  78. //往数据库去保存一本图书:
  79. Book book = new Book();//book是一个持久化对象,因为book有一个实体类已经
  80. //和我们的表建立起映射了 Book是一个持久化类 一new()就是瞬时态了
  81. //瞬时态: 没有唯一标识OID,没有与session关联.
  82. //刚new()出来,从数据库里面也不知道它是什么。它根本就没有OID,没有和session关联,是一个单独的
  83. //对象
  84. book.setName("Hibernate开发");
  85. book.setAuthor("孙XX");
  86. book.setPrice(65d);
  87.  
  88. session.save(book); //持久态 往数据库一存它就有OID了,而且是和session关联。
  89. //持久态: 有唯一标识OID,与session关联.
  90.  
  91. // 3.事务提交
  92. tx.commit();
  93. //4.释放资源
  94. session.close();
  95.  
  96. book.setName("Struts2开发"); //脱管态 session关闭了,book不与session关联了。
  97. //脱管态:有唯一的标识,没有与session关联.
  98. fail("Not yet implemented");
  99. }
  100.  
  101. }
  102. //******自动更新数据库的能力依赖了Hibernate的一级缓存.

day35-hibernate映射 04-Hibernate的一级缓存:一级缓存的存在的更多相关文章

  1. Hibernate 系列 04 - Hibernate 配置相关的类

    引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...

  2. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  3. 一级缓存二级缓存(hibernate)

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  4. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Hibernate 再接触 一级缓存 二级缓存 查询缓存

    缓存 就是把本来应该放在硬盘里的东西放在内存里  将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的   (适合经常访问,数据量有限,改动不大) 很多的se ...

  6. Hibernate——(5)持久化对象和一级缓存机制

    一.对象的三种状态 1.暂时态:当对象刚创建,和Session没有发生任何关系时,当程序运行完就即刻消失,被称为暂时态. 2.持久态:当执行如下代码时,对象变为持久态 Emp e = new Emp( ...

  7. hibernate的获取session的两方法比较,和通过id获取对象的比较,一级缓存二级缓存

    opensession与currentsession的联系与区别 在同一个线程中opensession的session是不一样的,而currentsession获取的session是一样的,这就保证了 ...

  8. hibernate学习(9)——日志,一对一,二级缓存

    1.Hibernate中的日志 1  slf4j 核心jar  : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合. 整合导入jar包 log4j 核心 ...

  9. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  10. 【Hibernate】解析hibernate中的缓存

    Hibernate中的缓存一共有三种,一级缓存.二级缓存.查询缓存.缓存除了使用Hibernate自带的缓存,还可以使用redis进行缓存,或是MongoDB进行缓存. 所使用的Demo: User. ...

随机推荐

  1. SSM整合(spring、springMVC、mybatis)

    需要用的包: 包括:spring的包.springMVC的包.mybatis的包.数据库驱动包.json相关的包 配置如下,首先是mybatis的配置 <?xml version="1 ...

  2. Spring_学习_00_资源帖

    一.官方文档 1.Spring Framework Documentation 二.参考书籍 1.< Spring实战 (第四版)> 三.参考资料

  3. 速记JVM内存模型和垃圾回收策略

    一.常用JVM参数 -Xms: 初始堆大小 -Xmx: 最大堆-Xmn: 新生代大小 -Xss: 栈容量 -PermSize: 方法区大小 -MaxPermSize: 最大方法区大小 -MaxDire ...

  4. db2生成连续日期

    //生成时间段内连续日期 select * from ( select date('2008-01-01') + (row_NUMBER() over () -1) days AS datennn f ...

  5. BZOJ- 2733: 永无乡 (并查集&线段树合并)

    题意:给定N个节点,K次操作,操作有两种,1是合并两个集合,2是求某个集合的第K大(从小到大排序). 思路:合并只要启发式即可.此题可以用线段树,保存1到N的排序的出现次数和. 复杂度O(NlogN) ...

  6. To Java程序员:切勿用普通for循环遍历LinkedList(转)

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  7. CAS单点登录系统简介

    一.cas简介 全名:Central Authentication Service特点: 1.开源的.多协议的 SSO 解决方案: Protocols : Custom Protocol . CAS ...

  8. IDEA 设置导出

    见附件 https://files.cnblogs.com/files/chuancheng/settings.7z

  9. 推荐几个MySQL大牛的博客

    1.淘宝丁奇 http://dinglin.iteye.com/ 2.周振兴@淘宝 花名:苏普 http://www.orczhou.com/ 3. 阿里云数据库高级专家彭立勋为 MariaDB Fo ...

  10. Java基础--反射Reflection

    Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...