本文給你們介紹一下MyBatis的二級緩存,前面介紹了,mybatis中的二級緩存是mapper級別的緩存,值得注意的是,不一樣的mapper都有一個二級緩存,也就是說,不一樣的mapper之間的二級緩存是互不影響的。爲了更加清楚的描述二級緩存,先來看一個示意圖:
sql
從圖中能夠看出:緩存
緩存的執行原理和前面提到的一級緩存是差很少的,二級緩存與一級緩存區別在於二級緩存的範圍更大,多個sqlSession能夠共享一個mapper中的二級緩存區域。mybatis是如何區分不一樣mapper的二級緩存區域呢?它是按照不一樣mapper有不一樣的namespace來區分的,也就是說,若是兩個mapper的namespace相同,即便是兩個mapper,那麼這兩個mapper中執行sql查詢到的數據也將存在相同的二級緩存區域中。mybatis
因爲mybaits的二級緩存是mapper範圍級別,因此除了在SqlMapConfig.xml設置二級緩存的總開關外,還要在具體的mapper.xml中開啓二級緩存。設置以下:
app
這是在SqlMapConfig.xml中設置的,還得在具體的mapper.xml中設置,以下:
spa
能夠看到,具體的mapper中僅僅就一個<cache>標籤,並無配置啥東西,這是由於mybatis中有默認的實現,咱們若是不配置,那麼就默認使用那個默認的實現。在mybatis的核心包裏有cache的接口和這個默認的實現,我截個圖。
cdn
因此就明白了,爲啥不用配置均可以使用,mybatis中也就只有這一個默認實現類,若是不使用mybatis的默認二級緩存的話,就須要本身實現cache接口,而後再在mapper.xml中配置一下了,關於這個我在下面再談,如今先把二級緩存用起來!xml
開啓了二級緩存後,還須要將要緩存的pojo實現Serializable接口,爲了將緩存數據取出執行反序列化操做,由於二級緩存數據存儲介質多種多樣,不必定只存在內存中,有可能存在硬盤中,若是咱們要再取這個緩存的話,就須要反序列化了。因此建議mybatis中的pojo都去實現Serializable接口。下面以User爲例截個圖:blog
OK,二級緩存是否是很簡單,今天就分享到這,若是以爲對你有一丟丟幫助,點個贊哦!
接口