mybatis的一級查詢快取

2021-09-06 10:14:39 字數 1106 閱讀 1547

之所以需要查詢快取主要是為了提高查詢訪問速度,就是當使用者執行一次查詢後,會將該資料結果放到快取中,當下次再執行此查詢時就不會訪問資料庫了而是直接從快取中獲取該資料。 如果在快取中找到了資料那叫做命中。 在mybatis中有一級快取和二級快取兩種快取方式。當乙個 sqlsession 結束後,該 sqlsession 中的一級查詢快取也就不存在了。mybatis 預設一級查詢快取是開啟狀態,且不能關閉

mybatis的一級查詢快取(也叫作本地快取)是基於org.apache.ibatis.cache.impl.perpetualcache 類的 hashmap本地快取,其作用域是sqlsession,即在同乙個sqlsession中兩次執行相同的 sql 查詢語句,第一次執行完畢後,會將查詢結果寫入到快取中,第二次會從快取中直接獲取資料,而不再到資料庫中進行查詢,這樣就減少了資料庫的訪問,從而提高查詢效率。

system.out.println(address.getid());

system.out.println(address2.getid());

上面這個示例執行結果如下:

執行結束後,在控制台中可以看到mybatis只傳送了一條sql語句,也就是說上面方法中的第二次查詢中使用了快取中的資料。

在了解了快取之後,那麼我們會面臨乙個問題,如果執行增刪改操作,對快取會有影響嗎?

mybatis會為selectbyprimarykey建立快取,那在下一次訪問該資料的時候會直接從快取中獲取,倘若在這期間,建立快取後,下次訪問前,對資料進行了增刪改的操作,此時無論是否commit,都會清空一級快取。

將上面的測試方法修改如下:

執行該測試方法後可以發現在控制台中列印出了兩條查詢sql語句,一條update語句。

mybatis一級快取

autowired private sqlsessionfactory sqlsessionfactory autowired test transactional public void test selectall.size log.info 第2次查詢 selectall2.size 同乙個s...

MyBatis 一級快取

本地快取作用域預設為該sqlsession。當session flush或 close後,該session中的所有cache將清空。同一次會話期間,只要查詢過的資料都會儲存在當前sqlsession的乙個map中 key hashcode 查詢sql的id 編寫的sql語句 引數 1.不同的sqls...

mybatis一級快取

mybatis一級快取在沒有使用事務後,本地看不到效果,查詢時還是查詢了兩次資料庫。如下圖所示 開啟事務,在同乙個方法 同乙個回話,一級快取才有效果 transactional public refund getrefundtest long brefundid 加上事務後效果如下 一級快取什麼時候...