一级缓存:事务级缓存 或 Session级缓存
其实质是由Hibernate自动维护的一个map,根据id来缓存实体对象(不存放普通属性的查询)
***不能跨sesseion/transaction访问
无论是list(), load()还是iterate,只要读出的是对象, 都会自动填充一级缓存
但是list()本身不去使用缓存, iterate是先去DB中select id出来,在一个一个load(),如果缓存中有就直接返回,没有的话再去数据库中查询
二级缓存
SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,可以跨session访问
一般由EhCache, OSCache等实现
也只是针对ID来缓存实体对象
1) EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。
2) OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。
3) SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。
4) JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。
适合存放到第二级缓存中的数据
1) 很少被修改的数据
2) 不是很重要的数据,允许出现偶尔并发的数据
3) 不会被并发访问的数据
4) 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
不适合存放到第二级缓存的数据?
1) 经常被修改的数据
2) 财务数据,绝对不允许出现并发
3) 与其他应用共享的数据。
查询缓存
默认是关闭的。查询缓存是针对普通属性结果集的缓存, 对实体对象的结果集只缓存id
查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束
Hibernate的Query缓存策略的过程如下:
1) Hibernate首先根据这些信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等
2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中
3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空
一些注意事项:
1) 针对普通属性结果集的缓存
2) 对是实体对象的结果集,只缓存id
3) 用查询缓存,需要打开查询缓存,并且在调用list方法之前需要显示的调用query.setCacheable(true);
4) 查询缓存与session无关,即在一个session上做了查询缓存,那么在另一个session中可以取到查询缓存的内容,不再发出SQL
5) 查询缓存只对query.list()操作有效,query.iterate()操作不会使用查询缓存
6) 一级缓存与二级缓存是缓存实体,而查询缓存是缓存普通属性
- 浏览: 26983 次
相关推荐
9. 性能优化:最后,笔记会探讨一些Hibernate的性能优化技巧,如批处理、缓存策略、延迟加载的合理使用等,以提高应用程序的运行效率。 总之,《韩顺平.2011版.hibernate笔记》全面地介绍了Hibernate的各个方面,...
2. **持久化机制**:Hibernate提供了一套完整的对象持久化机制,包括缓存、事务管理、以及对实体对象的生命周期管理等,大大简化了Java应用程序与数据库之间的交互过程。 3. **懒加载和级联操作**:Hibernate支持懒...
7. **性能优化**:Hibernate的性能优化主要包括缓存机制(第一级缓存、第二级缓存)、批处理、延迟加载等策略,通过合理设置和使用,可以显著提高应用程序的运行效率。 8. **Annotation与XML配置**:Hibernate支持...
8. **缓存机制**:Hibernate提供了一级缓存和二级缓存,能有效减少数据库访问,提高应用性能。 9. **实体生命周期**:Hibernate定义了持久化对象的生命周期状态,包括临时态、瞬时态、持久态和脱管态,理解这些状态...
5. **二级缓存**:Hibernate支持缓存机制,通过插件如Ehcache,可以提高数据访问效率,减少对数据库的直接访问。 6. **实体生命周期**:Hibernate定义了对象的四种状态(瞬时态、持久态、托管态、脱管态),理解...
4. Cache:Hibernate内置了二级缓存机制,包括一级缓存Session和二级缓存SessionFactory,提高了数据访问速度。 二、Hibernate配置 1. 配置文件:hibernate.cfg.xml是Hibernate的主要配置文件,包含了数据库连接...
- 缓存机制:介绍Hibernate的一级缓存(Session级别)和二级缓存(SessionFactory级别),以及如何配置和利用缓存提高性能。 - 事务管理:讨论Hibernate如何支持事务,以及如何在代码中控制事务的提交和回滚。 - ...
Hibernate支持缓存机制,第二级缓存可以存储已持久化的对象,提高查询性能。它可以是进程内缓存(如:EHCache)或分布式缓存(如:Infinispan)。 8. 事务管理: Hibernate提供了事务API,如Transaction接口,...
5. **缓存机制** - 第一级缓存:Session级别的缓存,每个Session都有自己的缓存,存储了最近访问过的对象。 - 第二级缓存:SessionFactory级别的缓存,可以跨Session共享,常使用第三方缓存提供商如Ehcache。 - ...
6. **缓存机制**:Hibernate提供了一级缓存(Session级别的)和二级缓存(SessionFactory级别的),提高了数据读取效率。 7. **对象状态**:Hibernate区分了瞬时、持久化、托管和脱管四种对象状态,理解这些状态...
5. **缓存机制**: 第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 6. **事务管理**: 提供编程和声明式事务管理,与Spring整合时通常使用声明式事务。 **Spring3笔记** Spring是...
- **缓存机制**: Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),提高性能。 - **懒加载和立即加载**: 控制关联对象的加载时机,优化内存使用。 - **多态性支持**: 可以直接根据父类...
6. **缓存机制**:Hibernate的缓存分为一级缓存(Session级别)和二级缓存(SessionFactory级别),笔记会介绍它们的工作原理和优化策略,如查询缓存、集合缓存等。 7. **一对多、多对一、一对一和多对多关系映射**...
2. **缓存机制**:Hibernate提供了第一级缓存(Session缓存)和第二级缓存(可配置的外部缓存),以提高性能。 3. **查询语言**:Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但操作的是...
8. **性能优化**: Hibernate 提供了缓存机制以提高性能,包括第一级缓存(Session缓存)和第二级缓存。对于1+N问题,可以使用预加载(fetch join)避免多次查询。另外,还有三级缓存的概念,包括Session级别的缓存、...
6.1 案例分析:结合黑马程序员的day1至day4的讲义和笔记,深入理解在实际项目中如何应用Hibernate,解决具体问题。 总结,Hibernate作为强大的ORM框架,为Java开发者提供了便利,通过理解并熟练掌握其核心概念、...
1. **缓存机制**: 第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),减少数据库访问。 2. **批处理**: 批量插入、更新,提高数据库操作效率。 3. **延迟加载(Lazy Loading)**: 只在需要...
8. **缓存机制**:Hibernate有第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。理解缓存原理和配置缓存策略是提高性能的关键。 9. **实体生命周期**:理解Hibernate中的...
- 缓存机制:提供第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 - 支持懒加载和立即加载:根据需求决定何时加载关联对象。 - 异步操作:通过Future或Async支持异步数据访问。 - ...