hibernate 一級緩存,二級緩存,查詢緩存


1、一級緩存是session級的緩存,session結束即事務提交,session關閉,緩存清除。效果不大

   get方式:一個session內,第二次查詢不連數據庫。適用於一級緩存

   load方式:懶加載查詢(查詢時不執行sql,使用結果時才會執行sql),第二次查詢不連數據庫。適用於一級緩存

   createQuery(hql).list():查詢了整個list,第一次調用list()時,執行sql。第二次查詢時,又執行了sql,說明不使用一級緩存。也就是不使用二級緩存

   createQuery(hql).iterate():只查詢了id,第一次調用iterate()時,執行sql,查詢id(查詢部分屬性),當得到對象並且使用時,會出現查詢整個實體語句。但第二個iterate()時,執行sql(不適用一級緩存),查詢id(部分字段)   得到對象時不會產生語句,適用一級緩存。查詢部分字段,返回object[]數組,不適用一級緩存。查詢部分字段,封裝成對象

例如String sql = select new UserPoJo(u.id,u.name) from UserPoJo u;第二次同樣執行了sql,也不適用一級緩存,緩存只認全部字段的對象。

   save:在一個session中,先新增save ,然后get 或者load   save方法也是使用一級緩存

    

2、二級緩存是sessionFactory級別緩存。進程級緩存,工廠級緩存,可以被所有session共享。提升性能用

  主要是配置第三方廠家。有jar包,cache的策略文件(Eh..緩存),配置二級緩存廠商類,開啟二級緩存,二級緩存屬性,配置哪些類適用二級緩存,還需要類的屬性(需要放到文件的最下面),例如只讀。

二級緩存可以管理,可以通過evict清空

 

3、查詢緩存

查詢緩存存儲的是部分屬性,也叫普通屬性

查詢緩存 會存儲實體對象的id

查詢緩存的生命周期不確定

查詢緩存也需要配置

  list():一個session中,第二次查詢不執行sql,說明適用查詢緩存。查詢的是部分字段;兩個session中,同樣適用,說明查詢緩存與session無關

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM