1. 程式人生 > >springBoot中配置mybatis的二級快取

springBoot中配置mybatis的二級快取

在結合springBoot和mybatis的時候想用二級快取怎麼辦,請耐心看完。

什麼是延遲載入 

        resultMap中的association和collection標籤具有延遲載入的功能。

        延遲載入的意思是說,在關聯查詢時,利用延遲載入,先載入主資訊。使用關聯資訊時再去載入關聯資訊。

設定延遲載入

        需要在SqlMapConfig.xml檔案中,在<settings>標籤中設定下延遲載入。

        lazyLoadingEnabled、aggressiveLazyLoading

設定項

描述

允許值

預設值

lazyLoadingEnabled

全域性性設定懶載入。如果設為‘false’,則所有相關聯的都會被初始化載入。

true | false

false

aggressiveLazyLoading

當設定為‘true’的時候,懶載入的物件可能被任何懶屬性全部載入。否則,每個屬性都按需載入。

true | false

true

1 2 3 4 5 6 7 8 9 10 <!-- 開啟延遲載入 --> <settings> <!-- lazyLoadingEnabled:延遲載入啟動,預設是false -->
<setting name="lazyLoadingEnabled" value="true"/> <!-- aggressiveLazyLoading:積極的懶載入,false的話按需載入,預設是true --> <setting name="aggressiveLazyLoading" value="false"/> <!-- 開啟二級快取,預設是false --> <setting name="cacheEnabled" value="true"/> </settings>

什麼是查詢快取

Mybatis的一級快取是指SqlSession。一級快取的作用域是一個SqlSessionMybatis預設開啟一級快取

在同一個SqlSession中,執行相同的查詢SQL,第一次會去查詢資料庫,並寫到快取中;第二次直接從快取中取。當執行SQL時兩次查詢中間發生了增刪改操作,則SqlSession的快取清空。

Mybatis的二級快取是指mapper對映檔案。二級快取的作用域是同一個namespace下的mapper對映檔案內容,多個SqlSession共享。Mybatis需要手動設定啟動二級快取

在同一個namespace下的mapper檔案中,執行相同的查詢SQL,第一次會去查詢資料庫,並寫到快取中;第二次直接從快取中取。當執行SQL時兩次查詢中間發生了增刪改操作,則二級快取清空。

一級快取原理

wKiom1WII2CwQRhlAADBHk2wFdY170.jpg

一級快取區域是根據SqlSession為單位劃分的。

每次查詢會先去快取中找,如果找不到,再去資料庫查詢,然後把結果寫到快取中。Mybatis的內部快取使用一個HashMap,keyhashcode+statementId+sql語句。Value為查詢出來的結果集對映成的java物件。

SqlSession執行insertupdatedelete等操作commit後會清空該SQLSession快取。

二級快取原理

wKioL1WIJXvA4ngUAADEvZunxso732.jpg

二級快取是mapper級別的。Mybatis預設是沒有開啟二級快取。

第一次呼叫mapper下的SQL去查詢使用者資訊。查詢到的資訊會存到該mapper對應的二級快取區域內。

第二次呼叫相同namespace下的mapper對映檔案中相同的SQL去查詢使用者資訊。會去對應的二級快取內取結果。

如果呼叫相同namespace下的mapper對映檔案中的增刪改SQL,並執行了commit操作。此時會清空該namespace下的二級快取。

開啟二級快取

1、  在核心配置檔案SqlMapConfig.xml中加入以下內容(開啟二級快取總開關):

cacheEnabled設定為 true

wKiom1WIJFChnBasAADcJX3IbNs777.jpg

2、在對映檔案中,加入以下內容,開啟二級快取:

wKiom1WIJHGj-78eAACCk6Tv9vs396.jpg

實現序列化

由於二級快取的資料不一定都是儲存到記憶體中,它的儲存介質多種多樣,所以需要給快取的物件執行序列化。

如果該類存在父類,那麼父類也要實現序列化。

wKioL1WIJmXQfEQ4AAC1EcHDT6w451.jpg

禁用二級快取

該statement中設定userCache=false可以禁用當前select語句的二級快取,即每次查詢都是去資料庫中查詢,預設情況下是true,即該statement使用二級快取。

wKiom1WIJPvRdgaUAAC-FQgNUyI548.jpg

重新整理二級快取

wKioL1WIJvXykyTeAACdJiTWDLM099.jpg

以上是參考的原文在http://www.cnblogs.com/QQParadise/articles/5109633.html

又在思考,springboot中沒有設定mybatis的配置檔案怎麼辦?

如下

mybatis.configuration.cache-enabled=true

在配置檔案中新增以上的配置,

其餘的也差不多配置了,希望能幫到你