為了提公升查詢效率,提高使用者體驗,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雖然能夠把物件放入二級快取...