`
acen.chen
  • 浏览: 157397 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate 缓存机制(二)

阅读更多

为什么使用hibernate
  1、对JDBC操作提供封装,方便操作简化数据库访问的代码(connection,eparedStatement,resultSet);
  2、简化DAO层的代码量ORM从关系型DB到面向对象(java)的转变
  3、在java代码中充斥着大量的sql语句不便于维护,但是ORM映射可以减少此类代码,便于维护

session.load和session.get的区别
  两者都是用缓存,load查询数据如果没有会出现Exception ,get会出现null
  load支持lazy , get不支持lazy
  load 查询 先查一级缓存,如果没有数据则会生成ciglib,在实际使用的时候(也就是lazy=true)查询二级缓存,还没有数据查询数据库,在没有就会出现异常,主意这里是Exception
  get 先查询一级缓存,在查询二级缓存最后查询数据库如果没有数据则出现null

hibernate中lazy的有效期是在session打开状态下
<class>上的lazy特性会影响普通属性

一级缓存是session级别的二级缓存是sessionFactory级别的
session使用evict和clear来管理缓存,不同的session不能共享数据但是可以共享sessionFactory
session和sessionFactory中存储的形式类似于Map 的键值对
key为实体对象的ID value 为实体对象

get load iterator 使用一级缓存  save方法支持缓存

list和iterate的区别?
* list每次都会发出查询语句,list向缓存中放入数据,但不利用缓存中的数据
* iterate在默认情况下利用缓存中的数据,只有在缓存中根据id无法找到相应

list不使用一级缓存 只会向 缓存中插入数据 所以list 每次都会发出sql语句

iterator N+1 问题
iterator查询实体对象会发出查询 ID 列表的sql语句如果一级二级缓存有数据则不发出查询实体的sql语句,如果没有则直接查询DB
list N+1 问题
实用查询缓存
查询实体对象
二级缓存不存在或是过期或者是evict

关于查询缓存:
hibernate查询缓存

查询缓存是针对普通属性结果集的缓存
对实体对象的结果集会缓存id

查询缓存的生命周期,当关联的表发生修改,那么查询缓存的生命周期结束

查询缓存的配置和使用:
* 启用查询缓存,修改hibernate.cfg.xml文件
<property name="hibernate.cache.use_query_cache">true</property>
* 在程序中必须启用,如:
       query.setCacheable(true);

----------------------------------------------

* 开启查询缓存,关闭二级缓存
  开启一个session,分别调用两次query.list()查询普通属性
  每次调用list 都要设置  query.setCacheable(true);

  只发出一条sql语句;
 
* 开启查询缓存,关闭二级缓存
  开启两个session,分别调用query.list()查询普通属性
 
第二次query.list()不会发出查询sql,因为查询缓存的生命周期和session无关
 
* 开启查询缓存,关闭二级缓存
  开启两个session,分别调用query.iterate()查询普通属性

查询缓存只对query.list起作用,query.iterate不起作用,其实query.iterate不使用查询缓存

* 关闭查询缓存,关闭二级缓存
  开启两个session,分别调用query.list()查询实体对象
 
发出查询sql,因为query.list默认情况下,每次都会发出查询sql

* 打开查询缓存,关闭二级缓存
  开启两个session,分别调用query.list()查询实体对象

会发出n条查询语句,因为开启了查询缓存,关闭了二级缓存,而且是跨session查询
查询缓存会缓存实体对象的id,所以hibernate会根据实体对象的id加载相应的实体
如果缓存中存在则加载缓存中的数据,否则根据id发出相应的查询语句

* 打开查询缓存,开启二级缓存
  开启两个session,分别调用query.list()查询实体对象
 
不会发出查询sql,因为开启了二级缓存和查询缓存,查询缓存缓存了实体对象的id列表
hibernate会根据实体对象的id到二级缓存中取得相应的数据




Transient状态的对象的特性?
* 在数据库中没有与之匹配的记录
* 没有纳入session的管理

persistent状态的对象的特性?
* 纳入session的管理
* persistent状态的对象在数据库中存在与之匹配的数据
* persistent状态的对象在清理缓存(脏数据检查),会和数据库同步

detached状态的对象的特性?
* 在数据库中存在与之对应的记录
* 没有纳入session的管理

session.flush方法主要做两件事:
* 清理缓存
* 执行sql

session在什么情况下执行flush
* 默认在事务提交时
* 显示调用flush
* 在执行查询前,如:iterate

按照save(insert),update,delete顺序执行

分享到:
评论

相关推荐

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    Hibernate缓存机制.txt

    Hibernate缓存机制.txt

    Hibernate缓存机制,转载

    **标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...

    hibernate缓存机制分析共17页.pdf.zip

    《Hibernate缓存机制详解》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是优化性能的关键组成部分,它减少了对数据库的直接访问,提高了数据处理效率。本文...

    Hibernate缓存机制解说

    ## Hibernate缓存机制详解 ### 一、缓存分类与管理 Hibernate提供了两种主要的缓存类型:一级缓存和二级缓存。 #### 1. 一级缓存 一级缓存也称为Session缓存,它在同一个Session中对数据的多次读取操作只需要一...

    Hibernate缓存机制探讨.doc

    ### Hibernate缓存机制详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它简化了 Java 应用程序与数据库交互的过程。然而,直接使用 JDBC 访问数据库存在一定的性能开销。为了提升性能,Hibernate ...

    Hibernate缓存机制

    h​i​b​e​r​n​a​t​e​缓​存​机​制​,​你​必​须​学​的​持​久​层​技​术​。

    Hibernate缓存机制探讨

    在配置Hibernate缓存时,需要明确哪些实体或查询结果应该缓存,并设置相应的缓存策略。例如,我们可以使用`@Cacheable`注解标记实体类,使用`@Cache`注解来定义缓存区域和策略。同时,对于查询结果的缓存,可以使用`...

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存机制深入浅出

    Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    hibernate一级缓存和二级缓存的区别与联系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...

    hibernate的缓存机制

    **标题:“Hibernate的缓存机制”** 在Java的持久化框架Hibernate中,缓存机制扮演着至关重要的角色,它能够显著提升数据访问的性能。缓存可以分为一级缓存和二级缓存,以及查询缓存。 **一级缓存**: 一级缓存是...

    Hibernate的缓存机制

    Hibernate的缓存机制是优化数据访问性能的关键技术之一。它主要分为一级缓存和二级缓存,以及查询缓存。 1. **一级缓存(Session级别缓存)**: - 一级缓存是每个Hibernate Session实例私有的,属于事务范围的缓存...

Global site tag (gtag.js) - Google Analytics