springBoot中配置mybatis的二級快取
在結合springBoot和mybatis的時候想用二級快取怎麼辦,請耐心看完。
什麼是延遲載入
resultMap中的association和collection標籤具有延遲載入的功能。
延遲載入的意思是說,在關聯查詢時,利用延遲載入,先載入主資訊。使用關聯資訊時再去載入關聯資訊。
設定延遲載入
需要在SqlMapConfig.xml檔案中,在<settings>標籤中設定下延遲載入。
lazyLoadingEnabled、aggressiveLazyLoading
設定項 |
描述 |
允許值 |
預設值 |
lazyLoadingEnabled |
全域性性設定懶載入。如果設為‘false’,則所有相關聯的都會被初始化載入。 |
true | false |
false |
aggressiveLazyLoading |
當設定為‘true’的時候,懶載入的物件可能被任何懶屬性全部載入。否則,每個屬性都按需載入。 |
true | false |
true |
|
什麼是查詢快取
Mybatis的一級快取是指SqlSession。一級快取的作用域是一個SqlSession。Mybatis預設開啟一級快取。
在同一個SqlSession中,執行相同的查詢SQL,第一次會去查詢資料庫,並寫到快取中;第二次直接從快取中取。當執行SQL時兩次查詢中間發生了增刪改操作,則SqlSession的快取清空。
Mybatis的二級快取是指mapper對映檔案。二級快取的作用域是同一個namespace下的mapper對映檔案內容,多個SqlSession共享。Mybatis需要手動設定啟動二級快取。
在同一個namespace下的mapper檔案中,執行相同的查詢SQL,第一次會去查詢資料庫,並寫到快取中;第二次直接從快取中取。當執行SQL時兩次查詢中間發生了增刪改操作,則二級快取清空。
一級快取原理
一級快取區域是根據SqlSession為單位劃分的。
每次查詢會先去快取中找,如果找不到,再去資料庫查詢,然後把結果寫到快取中。Mybatis的內部快取使用一個HashMap,key為hashcode+statementId+sql語句。Value為查詢出來的結果集對映成的java物件。
SqlSession執行insert、update、delete等操作commit後會清空該SQLSession快取。
二級快取原理
二級快取是mapper級別的。Mybatis預設是沒有開啟二級快取。
第一次呼叫mapper下的SQL去查詢使用者資訊。查詢到的資訊會存到該mapper對應的二級快取區域內。
第二次呼叫相同namespace下的mapper對映檔案中相同的SQL去查詢使用者資訊。會去對應的二級快取內取結果。
如果呼叫相同namespace下的mapper對映檔案中的增刪改SQL,並執行了commit操作。此時會清空該namespace下的二級快取。
開啟二級快取
1、 在核心配置檔案SqlMapConfig.xml中加入以下內容(開啟二級快取總開關):
cacheEnabled設定為 true
2、在對映檔案中,加入以下內容,開啟二級快取:
實現序列化
由於二級快取的資料不一定都是儲存到記憶體中,它的儲存介質多種多樣,所以需要給快取的物件執行序列化。
如果該類存在父類,那麼父類也要實現序列化。
禁用二級快取
該statement中設定userCache=false可以禁用當前select語句的二級快取,即每次查詢都是去資料庫中查詢,預設情況下是true,即該statement使用二級快取。
重新整理二級快取
以上是參考的原文在http://www.cnblogs.com/QQParadise/articles/5109633.html
又在思考,springboot中沒有設定mybatis的配置檔案怎麼辦?
如下
mybatis.configuration.cache-enabled=true
在配置檔案中新增以上的配置,
其餘的也差不多配置了,希望能幫到你