一级缓存:
@Test public void test01(){ Session session =null; try { session = HibernateUtil.openSession(); //此时会发出一条sql语句 List<Student> stu=session.createQuery("from Student").setFetchSize(0).setMaxResults(50).list(); for(Student s:stu){ System.out.println(s.getName()); } } catch (Exception e) { e.printStackTrace(); }finally{ if(session!=null) session.close(); } } @Test public void test02(){ Session session =null; try { session = HibernateUtil.openSession(); //如果使用iterator方法返回列表,对于hibernate而言,它仅仅只是发出一条sql语句去除id列表 //在查询响应的具体的某个学生信息时,会发出相应的sql去取学生信息 // 这就是典型的N+1问题 // 存在iterator方法的原因是,有可能会在一个session中查询两次数据,如果使用list每一次都会把所有的数据查询出来 // 而使用iterator方法仅仅智慧查询id,此时所有的对象已经存储在一级缓存中(session的缓存),之后调用的时候直接从缓存中获取 Iterator<Student> stu=session.createQuery("from Student").setFetchSize(0).setMaxResults(50).iterate(); while(stu.hasNext()){ System.out.println(stu.next().getName()); } } catch (Exception e) { e.printStackTrace(); }finally{ if(session!=null) session.close(); } } @Test public void test03(){ Session session =null; try { session = HibernateUtil.openSession(); List<Student> stu=session.createQuery("from Student").setFetchSize(0).setMaxResults(50).list(); for(Student s:stu){ System.out.println(s.getName()); } /** * id=1的student对象已经在session的缓存中(一级缓存)中,此时就不会发出sql语句去取 */ Student s=(Student)session.load(Student.class, 1); System.out.println(s.getName()); } catch (Exception e) { e.printStackTrace(); }finally{ if(session!=null) session.close(); } }
相关推荐
第一级缓存是Session级别的,每个Session都有自己的缓存,对象在此缓存中自动存储和检索。第二级缓存是SessionFactory级别的,可以跨Session共享,通常由第三方缓存提供商如Ehcache或Infinispan提供。缓存策略包括读...
4. 缓存配置:Hibernate提供了一级缓存和二级缓存,一级缓存是Session级别的,而二级缓存可以通过第三方插件如Ehcache进行配置,提高数据访问性能。 5. SessionFactory初始化:通过`Configuration`类加载配置信息并...
它提供了一种对象级别的缓存,确保了对象状态的一致性。 2. `Transaction transaction`:代表了一个数据库事务,用于管理一组数据库操作,确保它们要么全部成功,要么全部失败(ACID属性)。 `HibernateDAO` 类提供...
5. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,能提高性能,减少对数据库的访问。二级缓存则可以通过插件如Ehcache实现,可以跨会话共享...
Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者在处理数据库操作时的得力助手。本篇将深入探讨Hibernate3.jar及其API,帮助开发者更好地理解和运用这个库。 一、Hibernate3.jar介绍 Hibernate3....
8. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),能够提高数据访问速度并减少数据库压力。 9. **关联映射**: Hibernate支持一对一、一对多、多对一和多对多...
一级缓存是Session级别的,所有在Session内的操作都会缓存结果,提高读写效率。二级缓存则是SessionFactory级别的,可跨会话共享,通常需要配合第三方缓存实现,如Ehcache。Hibernate还支持查询缓存,将已执行过的...
3. Session:它是 Hibernate 的工作单元,用于执行 CRUD 操作,提供了事务管理、对象缓存等功能。 【API 接口】 1. Configuration:初始化和配置 Hibernate 环境,读取配置文件并生成 SessionFactory。 2. ...
主要的配置文件是`hibernate.cfg.xml`,其中包含了数据库连接信息、缓存设置、实体类扫描路径等关键配置。例如: ```xml <session-factory> <property name="hibernate.connection.driver_class">...
- **生命周期管理**:需要注意的是,一个`Session`实例应该在一个请求或者一个业务操作中被创建,并且在该操作完成后被关闭。这是为了确保线程安全以及资源的有效利用。 - **与JSP的集成**:在Web应用中,如JSP环境...
Hibernate提供了缓存策略,包括第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。合理利用缓存可以显著提升应用性能。 八、事务管理 Hibernate支持JTA和JDBC事务管理,...
需要配置日志框架的配置文件,如log4j.properties或logback.xml,指定日志级别、输出格式和目的地。 5. 数据源和SessionFactory配置:为了使用Hibernate,需要配置数据源(DataSource)和SessionFactory。数据源...
Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,可以减少数据库访问;二级缓存则需要配合第三方缓存框架如Ehcache,可进一步提高性能。 七、事务管理 ...
- **缓存机制**:Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),能有效提升性能。 3. **论坛系统架构**: - **用户模块**:包括用户注册、登录、个人信息管理等功能,通常会涉及User...
通过实践,可以深入理解Hibernate如何将Java对象与数据库记录关联,以及如何优化性能,如使用二级缓存和批处理等技术。 总的来说,“Hiberante lib”压缩包提供了搭建和学习Hibernate环境的基础组件,对于想要进入...
在 Hibernate 3.2 中,一级缓存(Session 缓存)默认开启,而二级缓存可以通过插件实现,如 Ehcache,它可以跨多个 Session 工作,提高数据读取速度。 6. **事件和监听器**:Hibernate 提供了事件驱动的机制,允许...
- 缓存策略:根据业务需求,选择合适的缓存策略,比如第二级缓存,以减少对数据库的访问。 - 分批读取和写入:如果数据量非常大,可以考虑分批读取和写入,避免一次性处理所有数据。 5. **事务管理** 操作BLOB...
4. **缓存机制**:Hibernate支持一级缓存(Session缓存)和二级缓存(可选),以提高数据访问性能。 5. **事务管理**:Hibernate整合了JTA(Java Transaction API)和JPA(Java Persistence API)的事务处理,确保...
Session缓存分为一级缓存和二级缓存。一级缓存是每个Session内部的,对象一旦持久化就会被添加进去。二级缓存是可选的,可以跨多个Session共享,但需要配置和管理。 ### 6. 源码分析 深入源码可以帮助我们理解...
Hibernate 提供了两级缓存:一级缓存(session 缓存)和二级缓存(全局缓存)。合理使用缓存可以显著提高应用程序的性能。 #### 映射策略 - **一对一、一对多、多对一和多对多**:Hibernate 支持各种复杂的关系...