`

Hibernate缓存学习笔记

阅读更多
一级缓存(在同一个Session中,缓存实体对象,生命周期与Session一致)
查询实体
  1.执行两次load,get,第二次会从缓存里取
  2.执行两次iterate
   HQL:from Student s where s.id=1
   第一次:
    首先:select student_id from t_student where student_id=1;查询出ID列表
    然后:select * from t_student where student_id=1;根据ID查询实体
   第二次:
    select student_id from t_student where student_id=1;查询出ID列表
    不会发出SQL,因为缓存里有。
  3.先save,后load或get,不会发SQL,因为save后,它会往缓存里放一份
 
查询普通属性
  1.执行两次iterate
   HQL:select s.name from Student s where s.id=1;
   第一次:select name from t_student where id=1;没有放入缓存
   第二次:select name from t_student where id=1;
缓存管理
  一级缓存是无法取消,但可以管理(session.evict(object),session.clear())
  Hibernate导入数据:因为save方法,每执行一次就会往缓存里让一份,所以可以每隔小量数据,
  先session.flush(),然后session.clear(),避免内存溢出。
  如果数据量特别大,可以采用jdbc,如果jdbc也不能满足要求,可采用数据库的专门导入工具
 
二级缓存(进程级缓存,缓存实体对象,生命周期与SessionFactory一致)
配置:1.首先到Hibernate根目录下的etc下的ehcache.xml拷贝到classpath可以搜索到的地方
    它有个默认配置选项
    <defaultCache
   maxElementsInMemory="10000"  //内存中可以存一万个对象
   eternal="false"     //这些对象在内存中不是永久有效的,与下面两个属性是互斥的
   timeToIdleSeconds="120"   //空闲的时间
   timeToLiveSeconds="120"   //缓存对象生命是多长(120秒)
   overflowToDisk="true"   //超过10000个对象时,是否要保存到磁盘上.保存路径为如下
   />
   <diskStore path="java.io.tmpdir"/>  这表示操作系统的临时路径,
   在WINDOWS上为C:\WINDOWS\temp\
    2.在Hibernate.cfg.xml中开启二级缓存将hibernate.cache.use_second_level_cache设置为true
    3.指定缓存产品提供商
    将hibernate.cache.provider_class设置为 org.hibernate.cache.OSCacheProvider
    4.在映射文件中指定缓存策略
   <cache usage="read-only"/>
   也可以在配置文件中指定<class-cache class="com.shadow.Student" usage="read-only"/>
   我个喜欢配置在配置文件中,这样查看比较方便(read-only效率最高,read-write也可以)
查询实体
  1.在两个不同的Session中,get,load,都会使用二级缓存
一级缓存与二级缓存的交互
  session.setCacheMode(CacheMode.GET | CacheMode.PUT | Cache.NORMAL)
 
查询缓存(只有query.list()使用查询缓存,query.list()也只使用查询缓存)
缓存普通属性结果集,对实体对象的结果集只缓存ID,如果当前关联的表发生的修改,那么查询缓存生命周期结束
配置:启用查询缓存 将hibernate.cache.use_query_cache设置为true
  在程序中显式的查询缓存query.setCacheable(true)
  HQL:select s.name from Student s
一.查询普通属性
  1.在同一个Session中,执行两次query.list();
   1>关闭二级缓存,关闭查询缓存,会发两次SQL
   2>关闭二级缓存,打开查询缓存,第一次会发,第二次不会发
  2.开启两个Session,分别调用query.list();
   关闭二级缓存,打开查询缓存,第一次会发,第二次不会发,查询缓存的生命周期与Session无关
  3.开启两个Session,分别调用query.iterate();
   关闭二级缓存,打开查询缓存,两次都会发,查询缓存对query.iterate()方法无效,即query.iterate()
   不使用查询缓存
二.查询实体对象
  1.开启两个Session,分别调用query.list();
   HQL:select s from Student s
   1>关闭二级缓存,关闭查询缓存,会发两次SQL
   2>关闭二级缓存,开启查询缓存,第一次会发一条SQL:select * from t_student
   第二次会发n条SQL,都是根据Id来查询,SQL:select * from t_student where id=?
   因为开启了查询缓存,对于实体对象只会缓存实体Id
   3>开启二级缓存,开启查询缓存,第一次会发,第二次不会发
  2.在同一个Session中,执行两次query.list();
   1>关闭二级缓存,关闭查询缓存,会发两次SQL,因为query.list()只存不取
分享到:
评论

相关推荐

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    hibernate个人学习笔记完整版

    【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Hibernate3 学习笔记.ppt

    【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式...学习和掌握Hibernate有助于提升Java应用的数据管理能力。

    Hibernate3.2学习笔记

    《Hibernate3.2学习笔记详解》 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层的数据存取。本篇学习笔记将深入探讨Hibernate...

    传智播客2016hibernate框架学习笔记

    《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。该资源包含了四天的学习内容,分别是day01、day02、day03和day04,涵盖了从基础到高级的多个主题。...

    hibernate框架学习笔记整理

    ### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    hibernate 3.3学习笔记

    **hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...

    hibernate-学习笔记

    【hibernate-学习笔记】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库数据的便捷方式。本学习笔记将深入探讨Hibernate的核心概念、配置、实体映射、查询...

    邹波老师Hibernate教程学习笔记

    《邹波老师Hibernate教程学习笔记》是针对Java开发者深入理解并掌握ORM框架Hibernate的重要参考资料。这是一份由个人在观看邹波老师的Hibernate视频教程后精心整理的学习笔记,旨在帮助初学者和有一定基础的程序员更...

    hibernate入门学习笔记+源码

    **hibernate入门学习笔记+源码** **一、Hibernate简介** Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过提供对象化的数据访问方式,Hibernate消除了传统JDBC代码中的...

    Hibernate4学习笔记1

    在这个学习笔记中,我们将深入探讨Hibernate4的二级缓存机制、访问策略以及一些主要的新特性。 **1. 二级缓存分类** Hibernate的二级缓存将不同类型的实体分开存储,这有助于优化性能和内存管理: - **单个实体**...

    hibernate框架开发2016版视频 四天学习笔记完整版

    【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...

    Hibernate+学习笔记

    【Hibernate 学习笔记】 Hibernate 是一款开源的对象关系映射(ORM)框架,它为 Java 开发者提供了在关系数据库和面向对象编程之间的一个抽象层。这个框架使得开发者可以使用面向对象的方式来操作数据库,而无需...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    Hibernate 4 学习笔记

    **标题:** Hibernate 4 学习笔记 **概述:** Hibernate 4 是一个流行的Java对象关系映射(ORM)框架,它允许开发人员在Java应用中处理数据库操作,而无需直接编写SQL语句。这个学习笔记将深入探讨Hibernate 4的核心...

    hibernate 个人学习笔记及代码

    通过深入学习和实践这个“hibernate 个人学习笔记及代码”包,初学者可以掌握Hibernate的基础知识和实战技能,为Java开发中的数据库操作打下坚实基础。在学习过程中,建议结合实际项目进行练习,以便更好地理解和...

    Hibernate3学习笔记(一)-hibernate概述和简单实例入门

    “Hibernate3学习笔记(一)-hibernate概述和简单实例入门” 这个标题表明了本文档将介绍的是关于Hibernate3的基本概念和初步应用。Hibernate3是Java开发中的一个流行对象关系映射(ORM)框架,它简化了数据库操作,将...

Global site tag (gtag.js) - Google Analytics