hibernate默认是开启一级缓存的,一级缓存存放在session上。
首先我们都知道在使用hibernate的时候,要创建SessionFactory和session,那么缓存,也是在这上面进行的。
首先是如下代码,测试session上面的缓存结果,在执行c2的时候,不会再有sql语句,这代表着实际上session是有缓存的(这很正常,因为不能查完就丢,毕竟之后可能会用到),这是1级缓存
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction();
System.out.println("log1");
Category c1 = (Category)s.get(Category.class, 1);
System.out.println("log2");
Category c2= (Category)s.get(Category.class, 1);
System.out.println("log3");
s.getTransaction().commit();
s.close();
sf.close();
hibernate二级缓存是需要自己配置第三方插件的,它本身不提供二级缓存,这篇博客介绍的比较详细,包括二级缓存的类型,如何配置等等问题。
https://www.cnblogs.com/fingerboy/p/5258930.html
二级缓存就是缓存到文件系统之中去了,这样,一个sessionFactory中的缓存就可以被它所创建的每个session共享到。