Hibernate的一级缓存见解

Hibernate一级缓存:

Hibernate中的一级缓存的理解,一共进行了三次查询。

第一次因为缓存中没有数据所以会去查询数据库,会发出sql语句;

第二次因为在同一个session中,所以可以使用hibernate的一级缓存,所以不发出sql语句(即没有查询数据库);

第三次因为hibernate的一级缓存只能在同一个session中共享数据,所以hibernate到数据库中去查询数据,会发出sql语句。

 

public void firstCacheOfSession(){
  Test test = null;
  Session session = null;
  
  try {
   session = HibernateSessionFactory.getSession();
   session.beginTransaction();
   
   //第一次会发出sql语句,因为没有缓存中没有数据要去数据库中查询
   test = (Test) session.get(Test.class, 1);
   System.out.println("first :"+test.getName());
   
   //第二次不会发出sql语句,因为在同一个session中,可以到hibernate的一级缓存中取数据
   test = (Test) session.get(Test.class, 1);
   System.out.println("Second :"+test.getName());
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   session.close();
  }
  
  
  try {
   session = HibernateSessionFactory.getSession();
   session.beginTransaction();
   
   //第三次会发出sql语句,因为hibernate一级缓存中的数据只能在同一个session中共享,所以在新的session中不能使用hibernate的一级缓存数据。
   test = (Test) session.get(Test.class, 1);
   System.out.println("Third :"+test.getName());
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   session.close();
  }
 }

 Hibernate二级缓存:

Hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。二级缓存是全局缓存,它可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。
使用hibernate的二级缓存后结果如图(配置另见hibernate二级缓存配置文章中,再次就不做介绍了):

可以看到使用了二级缓存后只发出了一条sql语句,是因为二级缓存是将数据存入了SessionFactory中,所以即使在不同的session中也可共享数据。

转载于:https://my.oschina.net/u/1273696/blog/182111

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值