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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值