MyBatis快取技術

2021-10-03 10:16:18 字數 2678 閱讀 2040

為了提公升查詢效率,提高使用者體驗,mybatis提供了資料快取支援,依據資料快取的有效範圍預設定義了一級快取和二級快取

1、該級快取預設開啟,不能關閉;

2、該級快取為sqlsession級別的快取,也稱為本地快取;

效果如下:

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

控制台:

我們可以看到:第二次直接輸出,實際上是已經快取了該運算元據,第二次直接讀取。

3、以下4種情況將會導致該級快取失效

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

控制台

我們可以看出:執行了兩次方法即獲取兩次資料庫資訊,並沒有讀取快取

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

結果:

依然是訪問資料庫獲取結果

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

結果

依然是連線資料庫獲取結果

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

結果:

連線資料庫獲取結果

1、該級快取預設不開啟,但如果使用二級快取需要在每個xml對映檔案中新增以配置該級快取。二級快取可以通過在全域性配置檔案配置setting標籤來關閉該級快取。

cache標籤屬性:

① eviction:快取**策略:

②flushinterval:重新整理間隔,單位毫秒,預設情況是不設定,也就是沒有重新整理間隔,快取僅僅呼叫語句時重新整理

③size:引用數目,正整數,代表快取最多可以儲存多少個物件,太大容易導致記憶體溢位

④readonly:唯讀,預設為false。true:唯讀快取;會給所有呼叫者返回快取物件的相同例項,速度快;false:讀寫快取;會返回快取物件的拷貝(通過序列化),速度慢但安全。

2、該級快取為namespace級別的快取

3、工作機制:通過sqlsession查詢資料,這些資料將會放到當前會話的一級快取中;如果當前會話關閉,則一級快取中的資料會被儲存到二級快取中,此後新的sqlsession將從二級快取中查詢資料

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

因為連線資料庫返回物件集合,所以序列化一下物件

sql xml檔案新增配置:

控制台:

4、select標籤的usecache屬性用於設定是否使用二級快取;insert、update、delete或select標籤均有flushcache屬性,其中增刪改預設true,即sql執行以後,會同時清空一級和二級快取,查詢預設false。

public

static

void

main

(string[

] args)

catch

(ioexception e)

}

配置屬性

控制台:

5、為了提高擴充套件性,mybatis定義了cache快取介面,可以通過實現該快取介面自定義二級快取

MyBatis快取技術

禁用二級快取 重新整理快取 org.mybatis.cachesgroupid mybatis ehcacheartifactid 1.0.2version dependency 第二步 引入快取配置檔案 classpath下 src下 新增 ehcache.xml xsi nonamespaces...

mybatis 一 快取技術

mybatis 預設開啟一級快取,sqlsession 級別的,它會出現髒讀的情況,比如說你在乙個service 方法中執行了三個sql語句,第乙個查詢sql語句,第二個更新sql語句,第三個查詢sql語句,第一次執行查詢sql語句的時候會將sql和對應的結果集儲存在乙個hashmap中,但是更新s...

hibernate快取,mybatis快取詳解

hibernate的快取有一級快取,二級快取,查詢快取。一級快取 很簡單,session級別的快取,通過get,update可以將物件放到一級快取中。二級快取 sessionfactory級別的快取,通過get,list可以將物件放到二級快取中,這裡我必須細講一下,list雖然能夠把物件放入二級快取...