Hibernate的一级缓存见解

主宰稳场 提交于 2019-11-29 21:19:17

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中也可共享数据。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!