是PerpetualCache.java(這個是基於SqlSession的一級緩存的)java
:BlockIngCache.java,其中的成員變量Cache,就是爲了加強PerpetualCache對象的;sql
默認是開啓的。要是須要關閉的話。須要配置 <select id="selectUserPosition1" flushCache="true">數據庫
一級緩存存在於Sqlsession生命週期,是線程獨享的(若Sqlsession關閉了,緩存也就失效了)緩存
任何的DDL語句,都會是緩存清除,session
一級緩存查詢出來的對象,是同一個對象app
若是一級緩存配置的是失效的話,二級緩存也是會查詢數據庫的;spa
二級緩存是存在於SqlSessionFactory中的,能夠理解爲是跨越Sqlsession 的,是以namespace爲單位的,不一樣的namespace互不影響;線程
緩存在settings中是默認開啓的cacheEnable = true,xml
還須要在mapper.xml裏面配置<cache>節點信息對象
Mybatis中的緩存,不用string,而是用CacheKey,是由於影響緩存的因素不少: