重要概念
-
SqlSession:代表和資料庫的一次會話,提供了操作資料庫的方法,
-
MappedStatement:代表要發往資料執行的命令,可以理解為SQL的抽象表示,
-
Executor:和資料庫互動的執行器,接收MappedStatement,
-
映射介面:在介面中會要執行的SQL用一個方法表示,具體SQL寫在映射檔案中,
-
映射檔案:撰寫SQL的檔案,
一級快取介紹
在代碼運行時,有可能會在一個資料庫會話中執行多次相同的SQL,這種反復的查詢會帶來開銷,
每一個SqlSession都持有自己的快取,就是LocalCache,一種是Session級別的,在Mybatis中執行的所有陳述句都會共享這一個快取,一種是Statement級別的,快取只對當前statement陳述句,
當發起查詢時,Mybatis會根據statementId、params、rowBounds生成一個key,去Cache查,如果沒有的話會去資料庫查,并且快取到本地,

一級快取的不足
使用一級快取的時候,因為快取不能跨會話共享,不同的會話之間對于相同的資料可能有不一樣的快取,在有多個會話或者分布式環境下,會存在臟資料的問題,如果要解決這個問題,就要用到二級快取,MyBatis 一級快取無法關閉,但是有兩種級別可選:
-
session級別的快取,在同一個sqlSession內,對同樣的查詢將不再查詢資料庫,直接從快取中取,
-
statement級別的快取,為了避免上述問題,可以將一級快取的級別設為 statement 級別的,這樣每次查詢結束都會清掉一級快取,
二級快取
二級快取是用來解決一級快取不能跨會話共享的問題的,在XML檔案配置后可以被多個SqlSession共享,生命周期和應用同步,
如果MyBatis使用了二級快取,并且Mapper和select陳述句也配置使用了二級快取,那么在執行select查詢的時候,MyBatis會先從二級快取中取輸入,其次才是一級快取,
即MyBatis查詢資料的順序是:二級快取 —> 一級快取 —> 資料庫,
https://www.cnblogs.com/wuzhenzhao/p/11103043.html

一、二級快取的使用注意點
-
MyBatis默認的session級別一級快取,由于Spring Boat 中默認使用了hikariCP,所以基本沒用,需要開啟事務才有用,但一級快取作用域僅限同一sqlSession內,無法感知到其他sqlSession的增刪改,所以極易產生臟資料,
-
二級快取可通過cache-ref讓多個mapper.xml共享同一namespace,從而實作快取共享,但多表聯查時配置略微繁瑣,
-
生產環境建議將一級快取設定為statment級別(即關閉一級快取),如果有必要,可以開啟二級快取,
-
在分布式環境中也是不建議開啟二級快取的,因為快取是保存到本地的,這樣也會導致產生臟資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305086.html
標籤:其他
上一篇:配置一個簡單的傳統SSM專案
下一篇:【LeetCode】300.最長遞增子序列——暴力遞回(O(n^3)),動態規劃(O(n^2)),動態規劃+二分法(O(nlogn))
