Mybatis 三 Mybatis快取配置

2021-08-14 07:49:56 字數 1652 閱讀 1259

強烈推薦乙個大神的人工智慧的教程:

使用快取可以提高獲取資料的速度,避免頻繁的資料庫互動,尤其是在查詢越多,快取命中率越高的情況下,使用快取的作用就更加明顯了。一般提到mybatis快取的時候都是指二級快取,一級快取缺省會啟用。

catch (ioexception ignore)

}public sqlsession getsqlsession()}

2.建立乙個快取的測試類,cachetest

@test

public void testl1cache()finally

system.out.println("開啟新的sqlsession");

//開啟乙個新的sqlsession

sqlsession = getsqlsession();

try finally

}} 執行結果如下,在第乙個try語句塊中,我們寫了兩次查詢資料庫的語句,但是列印出的sql只有一條,證明第二條沒有查詢資料庫,而是查詢了快取,並且user1和user2是同乙個例項,先從資料庫中獲取user1的值,user1重新對username賦值,第二次查詢user2發現user2的username是user1修改後的值。

mybatis一級快取存在於sqlsession的生命週期中,在同乙個sqlsession中查詢時,mybatis會把執行的方法和引數通過演算法生成快取的鍵值,將鍵值和查詢結果放到乙個map中,如果同乙個sqlsession中執行的方法和引數完全一致,那麼通過演算法生成相同的鍵值,當map快取物件中已經 存在該鍵值時,則會返回快取中的物件.

select * from sys_user where id=#

第二個try語句塊中我們重新獲取了乙個新的sqlsession,查詢結果顯示,user2和第乙個語句塊中的user1沒有任何關係,當我們執行刪除操作後,用同乙個sqlsession執行相同的查詢,結果賦值給user3,結果表示user2和user3是不同的例項,原因是因為所有的insert,update,delete操作都會清空一級快取。

mybatis的二級快取不同於一級快取,一級快取存在於sqlsession的生命週期中,而二級快取可以理解為存在sqlsessionfactory的生命週期中。

1.mybatis配置檔案的簡單配置

在mybatis的全域性配置settings中有乙個引數cacheenabled,這個引數是二級快取的全域性開關.預設為true,所以可以不配置,如果將其設定為false,則在後邊所有快取的配置都不起作用了。

預設的二級快取的效果:

所有的select語句將會被快取

對映語句中所有的insert,update,delete操作會重新整理快取

快取會使用lru演算法來**

快取會儲存集合或物件的1024個引用

快取會被視為read/write的

mybatis預設提供的快取是基於map實現的記憶體快取,可以滿足基本使用,當資料量大的時候可以借助一些快取框架或redis快取來協助儲存mybatis的二級快取資料。

mybatis學習筆記三之mybatis外掛程式

一 外掛程式介紹 一般情況下,開源框架都會提供外掛程式或其他形式的擴充套件點,供開發者自行擴充套件。一是增加了框架的靈活性 二是開發者可以結合實際需求,對框架進行擴充套件。以mybatis為例,我們可基於mybatis外掛程式機制實現分頁 分表 監控等功能,在無形中增強功能。二 mybatis外掛程...

構建Mybatis專案 三

將spring3和mybatis3整合 新增依賴檔案 commons dbcp 1.4.jar commons logging 1.1.1.jar commons pool 1.5.5.jar mybatis spring 1.0.0.jar org.springframework.asm 3.0....

MyBatis學習總結(三)

一 連線資料庫的配置單獨放在乙個properties檔案中 1 在src目錄下新建乙個db.properties檔案,在db.properties檔案編寫連線資料庫需要使用到的資料庫驅動,連線url位址,使用者名稱,密碼 driver com mysql jdbc driver url jdbc m...