Mybaitis 快取的優化
我們先來看程式碼
這段程式碼中, Mybatis一共發了兩條SQL,這就好像說, Mybatis中沒有快取,然後我們開啟Mybatis的文件一看,頓時震驚
這難道是騙人的,說好的預設開啟快取呢…..
其實不是的,預設確實是開啟快取的,但是我們還需要配置一點東西
UserMapper.xml
另外,物件還要實現序列化介面,否則報 NotSerializableException
的異常
設定完畢之後,我們再來嘗試 insert
的問題
此時發現,發了3條SQL,那麼究竟是什麼原因呢?如下圖
看完這個圖,就明白為什麼 get(1L)->add()->get(1L)
這個過程會發3條SQL了,因為 insert
的時候,清空了快取
但是就算 insert
,並沒有影響到 get(1L)
的結果,但是你卻把他的快取也清空了,這明顯不合理,那麼我們怎麼優化呢?
那麼我們可不可以這樣做呢?如圖:
也就是我們做了兩件事
-
list
由於快取命中率低,那麼我們就不加入到快取中 -
insert
我們不清空快取
那麼在程式碼中,我們具體是怎麼實現的呢?
UserMapper.xml
這樣之後,我們Mybatis中的快取就更高效了