Hibernate缓存分为三级:
一级缓存:基于事务级别(内存)的缓存,也可以成为session级别缓存
二级缓存:依赖于第三方,当请求一个对象时,先在缓存里面查找,如果没有就执行查询语句
查询缓存:基于二级缓存原理如上,将查询条件作为key,查询结果作为value放入缓存
因为之前听课时,老师是三种缓存半天就讲完了,加上没有预习,所以听的云里雾里,
现在来分别 总结一下,整理思路!
一级缓存:
一级缓存是存放实体类对象的缓存,且他只允许当前线程的用户使用!
生命周期:session关闭,一级缓存关闭
支持一级缓存的方法:
get,load,itetator,save
这三种方法之间细微的区别:
1.同一session:
两个get查询数据时:会执行一级缓存
两个load查询数据时:会执行一级缓存
两个itetartor查询对象时,n+1查询一次,第二次查询时,查询id,会执行一级缓存
(注意)两个itetartor查询普通属性时,不会执行以及缓存,因为一级缓存只会缓存实体类对象
当对对象保存时,save然后执行查询,会执行以及缓存
2.不同session:
save,itetator,get,load都不会执行一级缓存,因为 不同session之间不能够共享,这里可以测试得出结论
补充:大数据操作:
当执行大数据操作时,应该考略缓存是否溢出的问题
解决办法,添加代码
假如我是要添加一万条数据
我使用for循环进行添加
这时我判断if(i % 20 ==0)
{
session.flush();
//清空缓存
session.clear();
}