Mybatis一級和二級緩存
正如大多數持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持
1.Mybatis一級緩存爲sqlSession級別的緩存 默認開啓 相同的sqlsession對象 查詢相同條件的結果時 存在一級緩存只會查詢一次,sqlSession關閉後緩存失效 調用cleanCache後 緩存被清除,執行過增刪改後緩存會被清除
如果緩存中有數據就不用從數據庫中獲取,大大提高系統性能。
2.二級緩存爲sqlSessionFactory級別的緩存 默認不開啓
開啓方式爲如下:
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
在映射文件中添加cache標籤 默認使用LRU算法 也可以不適用默認 的配置
<cache eviction="FIFO" //回收策略爲先進先出
flushInterval="60000" //自動刷新時間60s
size=“512” //最多緩存512個引用對象 readOnly="true"/> //只讀
3.
* 一級緩存 同一個session對象針對同一份數據的查詢 產生的緩存
* 第一次查詢時 調用數據 獲取數據後
* 通過session設置到一級緩存中
* 第二次查詢時 通過session一級緩存判斷是否存在 相同主鍵的數據值
* 如果存在 直接返回引用 否則查詢數據庫
- 二級緩存 同一個sessionFactory下的不同session 可以共享數據
4.mybatis默認緩存類 FifoCache
內存數據不足時 需要一種機制 保證 內存不出現溢出 需要將舊的數據清除 最 先加入的數據 最先清除
LRU 最近使用次數最少的 被優先清除
LFU 最近一段時間內使用次數最少
5.MyBatis會在一次會話的表示—-一個SqlSession對象中創建一個本地緩存(local cache),對於每一次查詢,都會嘗試根據查詢的條件去本地緩存中查找是否在緩存中,如果在緩存中,就直接從緩存中取出,然後返回給用戶;否則,從數據庫讀取數據,將查詢結果存入緩存並返回給用戶。