【MyBatis】一級緩存和二級緩存

目錄

 

什麼是mybatis緩存?

一級緩存

二級緩存


什麼是mybatis緩存?

  • 查詢數據時將查詢結果存放到內存(緩存區)中。
  • 每次查詢數據時,先判斷緩存區中是否存在數據,
    • 如果存在,就從緩存區中獲取數據
    • 如果不存在,就從數據庫中獲取數據,將數據存放到緩存區中,給下次訪問使用
  • 好處:
    • 避免頻繁與數據庫交互,提高數據訪問效率。提升系統性能。

一級緩存

  • 一級緩存是SqlSession自帶的。SqlSession對象被創建,一級緩存就存在了。
  • 默認開啓
  • 如果SqlSession對象關閉或調用清理方法,會導致緩存失效。
  • 兩次sql查詢中間發生了增刪改(insert、update、delete)等操作commit後,SqlSession的緩存會被清空
  • 緩存底層實現就是通過HashMap實現的。key爲hashcode+statementId+sql語句,Value爲查詢出來的結果集映射成的java對象。
  • 一級緩存介質——內存

二級緩存

  • 二級緩存是指mapper映射文件。二級緩存的作用域是同一個namespace下的mapper映射文件內容,多個SqlSession共享且向sql中傳遞的參數也相同,即最終執行相同的sql語句。
  • 默認不開啓
  • 二級緩存SqlSessionFactory進行管理的。SqlSessionFactory對象是進程級別的。可以被多個SqlSession所共享。
  • 二級緩存介質——內存,硬盤
  • MyBatis框架自帶了二級緩存,是通過HashMap實現的。

二級緩存使用,需要在主文件中進行配置:

①啓用二級緩存

<!-- 啓用二級緩存 -->

<setting name="cacheEnabled" value="true"/>

​

②在XxxMapper.xml文件中配置二級緩存策略、

<cache eviction="FIFO" flushInterval="60000"readOnly="true" size="512"/>

1.eviction:緩存策略 
    FIFO:First In First Out 
    LRU:Least Recently Used
2.flushInterval:緩存刷新時間間隔,時間是毫秒,檢查是否存在過期對象
3.size:緩存中存儲的對象個數
4.readOnly:是否只讀

③對於MyBatis自帶的二級緩存,實體類可以不用實現可序列化接口。

如果使用的是EhCahce緩存組件,有時會將數據緩存到硬盤上,需要可序列化支持的。必須實現java.io.Serializable

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章