目錄
什麼是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