1. 程式人生 > >《深入理解mybatis原理》 MyBatis快取機制的設計與實現

《深入理解mybatis原理》 MyBatis快取機制的設計與實現

本文主要講解MyBatis非常棒的快取機制的設計原理,給讀者們介紹一下MyBatis的快取機制的輪廓,然後會分別針對快取機制中的方方面面展開討論。

MyBatis將資料快取設計成兩級結構,分為一級快取、二級快取:

       一級快取是Session會話級別的快取,位於表示一次資料庫會話的SqlSession物件之中,又被稱之為本地快取。一級快取是MyBatis內部實現的一個特性,使用者不能配置,預設情況下自動支援的快取,使用者沒有定製它的權利(不過這也不是絕對的,可以通過開發外掛對它進行修改);

       二級快取是Application應用級別的快取,它的是生命週期很長,跟Application的宣告週期一樣,也就是說它的作用範圍是整個Application應用。

   

  MyBatis中一級快取和二級快取的組織如下圖所示:

 一級快取的工作機制:

      一級快取是Session會話級別的,一般而言,一個SqlSession物件會使用一個Executor物件來完成會話操作,Executor物件會維護一個Cache快取,以提高查詢效能。關於一級快取的詳細實現,我已經在《深入理解mybatis原理》 MyBatis的一級快取實現詳解 及使用注意事項 一文中有非常詳盡的討論,讀者可以前去了解。

二級快取的工作機制:

       如上所言,一個SqlSession物件會使用一個Executor物件來完成會話操作,MyBatis的二級快取機制的關鍵就是對這個Executor物件做文章。如果使用者配置了"cacheEnabled=true",那麼MyBatis在為SqlSession物件建立Executor物件時,會對Executor物件加上一個裝飾者:CachingExecutor,這時SqlSession使用CachingExecutor物件來完成操作請求。CachingExecutor對於查詢請求,會先判斷該查詢請求在Application級別的二級快取中是否有快取結果,如果有查詢結果,則直接返回快取結果;如果快取中沒有,再交給真正的Executor物件來完成查詢操作,之後CachingExecutor會將真正Executor返回的查詢結果放置到快取中,然後在返回給使用者。

     MyBatis的二級快取設計得比較靈活,你可以使用MyBatis自己定義的二級快取實現;你也可以通過實現org.apache.ibatis.cache.Cache介面自定義快取;也可以使用第三方記憶體快取庫,如Memcached等,這個我們會在後續的文章中詳細討論。

                    
              

由於快取機制東西太多,所以將快取機制的敘述拆成一下幾部分(讀者可點選檢視):

1. MyBatis的一級快取實現詳解 及使用注意事項
2. MyBatis的二級快取的設計原理

3. 自定義二級快取(未完,待續)

4. 使用第三方記憶體庫作為MyBatis的二級快取(未完,待續)
--------------------- 
作者:亦山 
來源:CSDN 
原文:https://blog.csdn.net/luanlouis/article/details/41390801 
版權宣告:本文為博主原創文章,轉載請附上博文連結!