在hibernate中緩存不需要做任何配置,但多瞭解一下還是很有助於寫代碼的
借用緩存,有時候分開查詢比聯合查詢的速度更快。
緩存類型:
1.一級緩存2.二級緩存
3.查詢緩存
一級緩存:
1.也叫做session級的緩存,它的生命週期也session一樣,當session關閉的時候一級緩存清空
2. 一級緩存只能緩存對象load方法:支持一級緩存
get方法:支持一級緩存
iterator()方法:
因爲它有N+1的問題,所以要分開說:
N:這部分是支持一級緩存
1:這部分是不支持的。
save:把對象放到了緩存中,如果在同一個session中,先save再load的話
是不會發出sql語句的。
緩存的管理:
用session來管理緩存,使用clear()和evict()方法,清空緩存
二級緩存:
1.只能緩存實體對象
2.sessinFactory級的緩存
舉例:兩個session兩次load
第一次load的時候,把對象放到了一級緩存和二級緩存,當sesion關閉的時候
只清空了一級緩存,下一次再load的時候,會先到一級緩存中去找,如果開啓了
二級緩存就再到二級緩存中去找。
配置:(ehcache)
以下配置其實hibernate默認是開啓的,所以不需要寫任何內容!!,now,下面是解釋:
在hibernate.cfg.xml中配置1.手工開啓二級緩存
<property name="hibernate.cache.use_second_level_cache">true</property>
2.手工編寫提供商
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
3.指明那個類使用二級緩存
<class-cache usage="read-only" class="com.sxdx.hibernate.vo.Book"/>
注意:這句話放在<mapping>之後