1、一级缓存:Hibernate默认是开启一级缓存的,一级缓存存放在session里,一个Session做一次查询操作,会把这个操作的结果放在一级缓存中,如果短时间内这个session (同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不用再去连接数据库,取数据。
一级缓存生命周期依赖于Session生命周期,Session被关闭后,缓存也结束。
2、二级缓存:就是SessionFactory级别的缓存,查询的结果缓存到二级缓存中,同一个sessionFactory创建的某个session执行相同的操作,hibernate会从二级缓存中取结果,不会重新连接数据库
二级缓存被同一个SessionFactory里的所有Session共享,Session进行并发访问缓存时,必须对缓存更新,缓存生命周期依赖于SessionFactory周期,当SessionFactory被关闭后,二级缓存也结束。
二、一级缓存的应用代码如下
Hibernate的一级缓存在Session上
package com.demo.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.demo.pojo.Category; public class TetHibernate{ public static void main(String[] args){ SessionFactory sf=new Configuration().configure.buildSessionFactory();//建立一个SessionFactory对象 Session session=sf.openSession();//开启一个Session session.beginTransaction();//开启事务 Category c1=(Category)session.get(Category.class,1); System.out.println(c1.getName()); Category c2=(Category)session.get(Category.class,1); System.out.println(c2.getName()); session.getTransaction().commit(); session.close(); sf.close(); } }