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

相关文章: