參考文章: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;