mybatis提供查詢緩存,用於減輕數據庫壓力,提升性能。sql
一級緩存是sqlSession級別的,不一樣sqlSession之間的緩存數據區域相互不影響。在構造session對象時使用HashMap數據結構的內存區域存儲緩存數據。
一級緩存默認是開啓的。
sqlSession執行commit後會清空一級緩存,避免髒讀。數據庫
二級緩存是mapper級別的,不一樣sqlSession能夠共享同一個mapper中sql的緩存數據。
二級緩存默認不是開啓的,須要經過setting配置開始segmentfault
<setting name="cacheEnabled" value="true"/>
經過上面的配置能夠全局禁用二級緩存
在statement中設置 useCache=false 能夠禁止當前sql語句的二級緩存,該配置默認是true。緩存
二級緩存對細粒度的數據級別的緩存實現很差,由於是mapper級別的,同一個namespace下的數據緩存都會被刷新。session
當爲select語句時:
flushCache默認爲false,表示任什麼時候候語句被調用,都不會去清空本地緩存和二級緩存。
useCache默認爲true,表示會將本條語句的結果進行二級緩存。
當爲insert、update、delete語句時:
flushCache默認爲true,表示任什麼時候候語句被調用,都會致使本地緩存和二級緩存被清空。
useCache屬性在該狀況下沒有。數據結構
怎麼禁用一級緩存的效果mybatis
sql級別app
flushCache="true"性能
全局FlushCachespa
<setting name="localCacheScope" value="STATEMENT"/>
mybaitis插件