MyBatis 延遲加載,一級緩存,二級緩存設置

什麼是延遲加載 java

        resultMap中的association和collection標籤具備延遲加載的功能。sql

        延遲加載的意思是說,在關聯查詢時,利用延遲加載,先加載主信息。使用關聯信息時再去加載關聯信息。數據庫


設置延遲加載緩存

        須要在SqlMapConfig.xml文件中,在<settings>標籤中設置下延遲加載。app

        lazyLoadingEnabled、aggressiveLazyLoadingspa

設置項code

描述xml

容許值對象

默認值內存

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。一級緩存的做用域是一個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下的二級緩存。

 

開啓二級緩存

一、  在覈心配置文件SqlMapConfig.xml中加入如下內容(開啓二級緩存總開關):

cacheEnabled設置爲 true

 

 

 

二、在映射文件中,加入如下內容,開啓二級緩存:

 

 

實現序列化

    

因爲二級緩存的數據不必定都是存儲到內存中,它的存儲介質多種多樣,因此須要給緩存的對象執行序列化。

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

禁用二級緩存

該statement中設置userCache=false能夠禁用當前select語句的二級緩存,即每次查詢都是去數據庫中查詢,默認狀況下是true,即該statement使用二級緩存。

相關文章
相關標籤/搜索