hibernate的懒加载

在之前的基础上测试懒加载与普通加载的区别冬眠的懒加载

对象的三种状态对于Hibernate而言,对象的状态分为3种:

1)暂时态当对象刚创建,和会话没有发生任何关系时,当程序运行完就立刻消失,被称为暂时态。

2)持久态当执行如下代码时,对象变为持久态Emp e = new Emp();

session.save(); 持久态的对象和会话发生了关系,如执行了保存,获取,查询等方法

Session中会缓存该对象(Session的缓存即一级缓存)

会话再获取对象时,首先去查找一级缓存,如果没有才查询数据库

会议要负责将持久态对象的变化更新到数据库(在是flush()的时候更新,tx在提交的时候会自动调用session的flush())

3)游离态调用了session.evict(Object obj)方法,和Session解除了关系

 

 

 

冬眠懒加载

懒惰加载懒惰

懒加载又称延迟加载,

原理:当访问实体对象是,并不是立即到数据库中查询而是在真正要使用实体对象时,才到数据库中的查询数据,尽可能晚的将数据库的数据加载到内存来,作用提高应用的运行性能。

延迟加载的应用:session.Load()query.iterate()以及关联查询,这些方法返回的对象,里面没有数据,数据在用的时候(调用get()方法时),才取好处:不得,不查询数据库

验证一级缓存的存在 
      s.evict(学生);
      //从数据库中查询放到会话缓存中,s.evict清除缓存,清空,现在缓存没有
      //再次查询是,缓存中没有,到数据库查询

//验证一级缓存的存在
		@Test
	public void testExist() {
	  Session s = openSession();
	  Student student = (Student) s.get(Student.class, 2);
	  System.out.println(student.toString());
	  System.out.println("----------------------------");
	  s.evict(student);
	  //从数据库中查询放到session缓存中,s.evict清除缓存,清空,现在缓存没有
	  //再次查询是,缓存中没有,到数据库查询
	  Student st1 = (Student) s.get(Student.class, 2);
	  System.out.println(st1.toString());
	  System.out.println("-----------------");
	   System.out.println(st1==student);
		}
   

测试结果为假,第一次查询后,使用逐出()清空缓存,再次查询的时候缓存中不存在,重新再数据库中查询,这样的他们的物理存储空间就不相同了,则为假

 

在之前的基础上测试懒加载与普通加载的区别

  //验证懒加载的原理(get 不进行懒加载。load进行懒加载
		@Test
		public  void testLazy() {
			Session s=openSession();
			Student student = (Student) s.get(Student.class, 2);//进行查询
			System.out.println("-------------------");
			System.out.println(student.toString());
		}

 

 

@Test
   public void testLazy2() {
	   Session s=openSession();
	   Student student = (Student) s.load(Student.class, 2);  //运行到这,不做查询
	   System.out.println("----------------------");
	   System.out.println(student.toString());
	   s.close();
   }

 

这里需要注意分隔符的位置,因为在get()方法中,学生=(学生)s.get(Student.class,2); //进入数据库进行查询

而负载()的方法执行,的System.out.println(student.toString());这里才执行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值