`

Hiberante(九) 一级缓存(session级别)

 
阅读更多

一级缓存:

@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();
		}
		 
	 }

 

分享到:
评论

相关推荐

    Hiberante3相关文档

    第一级缓存是Session级别的,每个Session都有自己的缓存,对象在此缓存中自动存储和检索。第二级缓存是SessionFactory级别的,可以跨Session共享,通常由第三方缓存提供商如Ehcache或Infinispan提供。缓存策略包括读...

    hiberante 源码 配置资料

    4. 缓存配置:Hibernate提供了一级缓存和二级缓存,一级缓存是Session级别的,而二级缓存可以通过第三方插件如Ehcache进行配置,提高数据访问性能。 5. SessionFactory初始化:通过`Configuration`类加载配置信息并...

    DAO层中对Hiberante

    它提供了一种对象级别的缓存,确保了对象状态的一致性。 2. `Transaction transaction`:代表了一个数据库事务,用于管理一组数据库操作,确保它们要么全部成功,要么全部失败(ACID属性)。 `HibernateDAO` 类提供...

    hiberante4.2.3-part01

    5. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,能提高性能,减少对数据库的访问。二级缓存则可以通过插件如Ehcache实现,可以跨会话共享...

    Hiberante3.jar + API

    Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者在处理数据库操作时的得力助手。本篇将深入探讨Hibernate3.jar及其API,帮助开发者更好地理解和运用这个库。 一、Hibernate3.jar介绍 Hibernate3....

    hiberante中文帮助文档

    8. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),能够提高数据访问速度并减少数据库压力。 9. **关联映射**: Hibernate支持一对一、一对多、多对一和多对多...

    hiberante5基础讲义

    一级缓存是Session级别的,所有在Session内的操作都会缓存结果,提高读写效率。二级缓存则是SessionFactory级别的,可跨会话共享,通常需要配合第三方缓存实现,如Ehcache。Hibernate还支持查询缓存,将已执行过的...

    hiberante第一章.docx

    3. Session:它是 Hibernate 的工作单元,用于执行 CRUD 操作,提供了事务管理、对象缓存等功能。 【API 接口】 1. Configuration:初始化和配置 Hibernate 环境,读取配置文件并生成 SessionFactory。 2. ...

    hiberante5.0.7安装jar包

    主要的配置文件是`hibernate.cfg.xml`,其中包含了数据库连接信息、缓存设置、实体类扫描路径等关键配置。例如: ```xml &lt;session-factory&gt; &lt;property name="hibernate.connection.driver_class"&gt;...

    Hiberante中的五大核心接口.txt

    - **生命周期管理**:需要注意的是,一个`Session`实例应该在一个请求或者一个业务操作中被创建,并且在该操作完成后被关闭。这是为了确保线程安全以及资源的有效利用。 - **与JSP的集成**:在Web应用中,如JSP环境...

    hiberante ref document

    Hibernate提供了缓存策略,包括第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。合理利用缓存可以显著提升应用性能。 八、事务管理 Hibernate支持JTA和JDBC事务管理,...

    springmvc hiberante

    需要配置日志框架的配置文件,如log4j.properties或logback.xml,指定日志级别、输出格式和目的地。 5. 数据源和SessionFactory配置:为了使用Hibernate,需要配置数据源(DataSource)和SessionFactory。数据源...

    hibernate-release-5.1.16.Final.zip

    Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,可以减少数据库访问;二级缓存则需要配合第三方缓存框架如Ehcache,可进一步提高性能。 七、事务管理 ...

    Struts+Hiberante论坛系统,提供完整包

    - **缓存机制**:Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),能有效提升性能。 3. **论坛系统架构**: - **用户模块**:包括用户注册、登录、个人信息管理等功能,通常会涉及User...

    Hiberante lib

    通过实践,可以深入理解Hibernate如何将Java对象与数据库记录关联,以及如何优化性能,如使用二级缓存和批处理等技术。 总的来说,“Hiberante lib”压缩包提供了搭建和学习Hibernate环境的基础组件,对于想要进入...

    hiberante3.2源码

    在 Hibernate 3.2 中,一级缓存(Session 缓存)默认开启,而二级缓存可以通过插件实现,如 Ehcache,它可以跨多个 Session 工作,提高数据读取速度。 6. **事件和监听器**:Hibernate 提供了事件驱动的机制,允许...

    Hiberante读取BLOB数据类型.

    - 缓存策略:根据业务需求,选择合适的缓存策略,比如第二级缓存,以减少对数据库的访问。 - 分批读取和写入:如果数据量非常大,可以考虑分批读取和写入,避免一次性处理所有数据。 5. **事务管理** 操作BLOB...

    疯狂Ajax讲义+Spring+hiberante

    4. **缓存机制**:Hibernate支持一级缓存(Session缓存)和二级缓存(可选),以提高数据访问性能。 5. **事务管理**:Hibernate整合了JTA(Java Transaction API)和JPA(Java Persistence API)的事务处理,确保...

    hibernate3.2生命周期

    Session缓存分为一级缓存和二级缓存。一级缓存是每个Session内部的,对象一旦持久化就会被添加进去。二级缓存是可选的,可以跨多个Session共享,但需要配置和管理。 ### 6. 源码分析 深入源码可以帮助我们理解...

    hiberante 学习PDF

    Hibernate 提供了两级缓存:一级缓存(session 缓存)和二级缓存(全局缓存)。合理使用缓存可以显著提高应用程序的性能。 #### 映射策略 - **一对一、一对多、多对一和多对多**:Hibernate 支持各种复杂的关系...

Global site tag (gtag.js) - Google Analytics