Hiberante3
一级缓存总结
1.
Session 级别的缓存,它同
session邦定。它的生命周期和
session相同。
Session消毁,它也同时消毁;管理一级缓存,一级缓存无法取消,用两个方法管理,
clear(),evict()
2.
两个
session 不能共享一级缓存,因它会伴随
session的生命周期的创建和消毁;
3.
Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果
使用
HQL和
SQL是查询属性级别的,是不使用一级缓存的!切记!!!!
4 .
iterate 查询使用缓存,会发出查询
Id的
SQL和
HQL语句,但不会发出查实体的,
它查询完会把相应的实体放到缓存里边,一些实体查询如果缓存里边有,就从缓存中查询,但还是会发出查询
id的
SQL和
HQL语句。如果缓存中没有它会数据库中查询,然后将查询到的实体一个一个放到缓存中去,所以会有
N+1问题出现。
5 . List()
和
iterate
查询区别:
使用iterate,list查询实体对象*N+1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题
所谓的N+1是在查询的时候发出了N+1条sql语句1:首先发出一条查询对象id列表的sqlN:
根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句list和iterate的区别?
list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
6.Get()和load(),iterate方法都会使用一级缓存.
7.hiberate3 session 存储过程如下:
例如 object 对象
Session.save(object);
这时候不会把数据放到数据库,会先放到session缓存中去,数据库中没有相应记录,session.flush();才发SQL和HQL语句,数据库中有了相应记录,
但是数据库用select
查不到,这是跟数据库事物级别有关系
.
Session.beginTrransaction().commit();
事物提交后
可以查询到了。
Session.flush()语句但是为什么不写呢,因为commit()会默认调用flush();
Hiberante3
二级缓存总结
1.
Hibernate3的(
sessionFactory)二级缓存和
session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和
sessionFactory的生命周期是一样的,
sessionFactory可以管理二级缓存;
2.
sessionFactory级别的缓存,需要手动配置;所有的
session可以共享
sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到
sessionFactory级别的缓存中,适合放不经常变化的实体对象。)
3.
Hiberante3二级缓存的配置和使用方法如下:
1. 必须把
ehcache.jar包导入,然后到
Hibernate3.2的
etc文件下把
ehcache.xml复制到工程
src目录下(
ehcache.xml里边的参数里边有详细英文说明);
(说明:
ehcache.jar是第三方法的缓存产品,
hiberante只是把它做了集成,还有好多第三方
hibernate集成的缓存产品,相关说明请查阅
hiberante3开发手册;
ehcache是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,
hiberate3开发手册都有相头说明。配置方法都类似);
4.
Hibernate3的二级缓存默认是开起的,也可以指定开起。在
hibernate.cfg.xml 文件下配置如下:
*修改
hibernate.cfg.xml文件,开户二级缓存;
<property name=”hibernate.cache.use_second_level_cache”>true</property>
*指定二级缓存产品的提供商;
<property name=”hibernate.cache.provider_class”> org.hibernate.cache.EhCacheProvider
</property>
要让那些实体使用二级缓存,在
hibernate.cfg.xml配置文件中加入:
<!—
让这个实体用二级缓存
也可以在实体中映射文件去配置即:
<cache usage="read-only"/>
-->
<class-cache class=”com.zzz.hibernate.ClassT” usage=”read-only”/>
Read-only一般使用这个策略,其它的
hibernate3开发手册中也有详细介绍;
CacheMode去
hibernate3开发手册中搜索这个关键字,可以找到一级缓存和二级缓存交互使用的问题;
分享到:
相关推荐
总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
Hibernate 一级缓存和二级缓存的区别
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
总的来说,"hibernate二级缓存实例"是一个很好的学习资源,它可以帮助我们理解二级缓存的工作机制,掌握如何在项目中配置和使用,以及注意潜在的问题和优化策略。通过实践,我们可以更好地运用这一技术,提升Java...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
《深入理解Hibernate的一级缓存与二级缓存》 Hibernate作为一款强大的ORM框架,其缓存机制是优化数据库操作性能的关键之一。缓存主要分为一级缓存和二级缓存,它们各自承担着不同的职责,共同提升了数据访问的效率...
Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...
二级缓存通常由第三方插件如Ehcache、Infinispan等提供,这些插件实现了JCache(JSR-107)标准,与Hibernate无缝集成。 ### 3. 二级缓存配置 在Hibernate配置文件(hibernate.cfg.xml)中,我们需要添加二级缓存...
Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...
Hibernate 二级缓存
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...
### 一、一级缓存与二级缓存 1. **一级缓存(First-Level Cache)**:每个Session实例都有一个私有的、线程安全的一级缓存,它是默认开启且不可关闭的。当我们在Session中对实体进行CRUD操作时,数据会首先被缓存到...
用以介绍hibernate 框架的缓存机制
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
二级缓存是ORM框架(如Hibernate)中的一个重要特性,它可以在数据库和应用程序之间存储经常访问的数据,以减少对数据库的直接访问,从而提高性能。通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多...