参考文章:http://blog.csdn.net/wtz20110803/article/details/7297579数据库
缓存类型:类,集合 和 查询的缓存:缓存
1.一级缓存的主要做用不是用来提升性能,而是用来管理对象session
2.其中对象变化了能够更新到数据库中性能
3.一次会话级别的成为一级缓存,应用程序级别(sessionfactory级别)的成为二级缓存.net
4.二级缓存默认是不开启的对象
5.用集合缓存的话类的缓存也必需要打开,由于集合缓存中存的是每一项的ID,若是没有类的blog
缓存,则下次查询的时候因为二级缓存中没有此类,他会根据ID去数据库中查询,效率降低get
所以将类缓存,才能到二级缓存区中根据ID查找出来it
6.不论一级仍是二级缓存,都是在使用OID的方式获取对象时才有效,例如get或load方法io
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;