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开发手册中搜索这个关键字,可以找到一级缓存和二级缓存交互使用的问题;
分享到:
相关推荐
Hibernate3.jar是Hibernate ORM框架的第三个主要版本,它提供了丰富的功能,包括对象持久化、查询语言(HQL)、事务管理和缓存机制等。这个JAR文件包含了所有必要的类和库,使得开发者可以直接在项目中引用,实现对...
标题“Hiberante3相关文档”表明了主要讨论的是关于Hibernate3这一持久化框架的资料集合,可能涵盖了多个方面,如查询语言、缓存机制以及数据加载策略。 描述中的“Hiberante3_HQL”提示我们将会涉及到Hibernate...
4. 缓存配置:Hibernate提供了一级缓存和二级缓存,一级缓存是Session级别的,而二级缓存可以通过第三方插件如Ehcache进行配置,提高数据访问性能。 5. SessionFactory初始化:通过`Configuration`类加载配置信息并...
它提供了一种对象级别的缓存,确保了对象状态的一致性。 2. `Transaction transaction`:代表了一个数据库事务,用于管理一组数据库操作,确保它们要么全部成功,要么全部失败(ACID属性)。 `HibernateDAO` 类提供...
《疯狂Ajax讲义3》是针对Web开发领域中Ajax技术的深入学习资料,结合Spring和Hibernate两大框架,为读者提供...通过阅读《疯狂Ajax讲义3+Spring+hiberante》,你将能够掌握这一现代Web开发技术栈,提升自己的专业技能。
3. **hibernate-validator.jar**: 实现了JSR-303/JSR-349 Bean Validation标准,用于验证实体属性的值是否符合预定义的约束。 4. **jta.jar**: 为了支持分布式事务处理,Hibernate依赖于Java Transaction API(JTA...
3. 拦截器:Spring MVC的Interceptor可以拦截请求,执行预处理和后处理逻辑,如权限验证、日志记录、性能统计等。定义一个实现了HandlerInterceptor接口的类,并在Spring MVC配置中注册。 4. 日志记录:Spring MVC...
- **读取配置**:`Configuration` 类可以加载并解析配置文件,从而获取数据库连接的信息、缓存策略以及其他配置参数。 - **构建SessionFactory**:通过调用 `Configuration` 的 `buildSessionFactory()` 方法来创建 ...
3. **查询语言**:Hibernate支持两种查询方式:HQL(Hibernate Query Language)和 Criteria API。HQL是一种面向对象的查询语言,类似于SQL,但操作的是对象而不是表格。Criteria API则提供了更动态、类型安全的查询...
本讲义主要涵盖了Hibernate5的基础知识,包括安装配置、实体类与映射文件、会话工厂和会话、查询语言以及缓存机制等方面的内容。 一、安装配置 在开始使用Hibernate5之前,我们需要先进行环境搭建。这通常包括添加...
3. **实体类和映射文件**:在Hibernate中,Java类代表数据库中的表,类的属性对应表的字段。`@Entity`注解标识一个Java类为实体类,`@Table`定义实体对应的表名,`@Column`映射字段等。 4. **Session和Transaction*...
3. **数据库驱动**:Hibernate需要与特定的数据库进行交互,因此需要相应的数据库驱动jar文件(如mysql-connector-java.jar,如果目标数据库是MySQL)。驱动类负责建立与数据库的连接,执行SQL语句,并将结果转换为...
"疯狂Ajax讲义5+Spring+hiberante" 这个标题和描述暗示了我们即将探讨的主题是关于Web开发中的三个关键技术和框架:Ajax、Spring和Hibernate。Ajax(Asynchronous JavaScript and XML)是一种用于创建动态网页的技术...
3. 性能优化不足:JDBC 没有内置机制来自动优化查询,如缓存管理和事务控制等。 【Hibernate 的优势】 1. 完全面向对象:Hibernate 允许开发者用 Java 对象来表示数据库中的表,使得数据库操作更符合面向对象编程...
4. **缓存机制**:Hibernate支持一级缓存(Session缓存)和二级缓存(可选),以提高数据访问性能。 5. **事务管理**:Hibernate整合了JTA(Java Transaction API)和JPA(Java Persistence API)的事务处理,确保...
Hibernate支持多种数据库,提供缓存机制,能有效提高数据访问性能,并且具备事务管理和异常处理能力。 3. **Spring**:Spring框架是Java企业级应用的核心组件,它提供了一个全面的基础设施,支持开发、配置和集成...
3. **主要注解** - `@Entity`: 标记一个Java类为实体类,表示这个类将映射到数据库的一个表。 - `@Table`: 定义实体类对应的数据库表名和列信息。 - `@Id`: 指定实体类的主键字段。 - `@GeneratedValue`: 控制...
- 缓存策略:根据业务需求,选择合适的缓存策略,比如第二级缓存,以减少对数据库的访问。 - 分批读取和写入:如果数据量非常大,可以考虑分批读取和写入,避免一次性处理所有数据。 5. **事务管理** 操作BLOB...
Hibernate提供了缓存策略,包括第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。合理利用缓存可以显著提升应用性能。 八、事务管理 Hibernate支持JTA和JDBC事务管理,...