springboot 配置二級緩存


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

在配置文件中添加以上的配置,

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM