首页 > 代码库 > hibernate二级缓存
hibernate二级缓存
参考文章:http://blog.csdn.net/wtz20110803/article/details/7297579
缓存类型:类,集合 和 查询的缓存:
1.一级缓存的主要作用不是用来提高性能,而是用来管理对象
2.其中对象变化了可以更新到数据库中
3.一次会话级别的成为一级缓存,应用程序级别(sessionfactory级别)的成为二级缓存
4.二级缓存默认是不开启的
5.用集合缓存的话类的缓存也必须要打开,因为集合缓存中存的是每一项的ID,如果没有类的
缓存,则下次查询的时候由于二级缓存中没有此类,他会根据ID去数据库中查询,效率下降
因此将类缓存,才能到二级缓存区中根据ID查找出来
6.不论一级还是二级缓存,都是在使用OID的方式获取对象时才有效,例如get或load方法
7.HQL查询中,对于query.list()默认不会使用缓存,即使写成where id=1也不会,但会放入缓存之中
8.在使用HQL查询时,如果采用iterate()方法查询,则会使用缓存
因为这个方法是先查询所有符合条件的ID集合,再一个一个的按照ID查找数据,就能够使用缓存了
但是其有N+1次查询的问题,提升性能有限
9.查询缓存(此时将条件作为key缓存存储起来,若条件改变则缓存无效):
使用查询缓存session.createQuery("XXX") .setCacheable(true) .list();
主映射文件中的配置:
<property name="cache_use_query_cache">true</property>
使用时query查询时,setCacheable设置TRUE;