MyBatis是一個支持定製化SQL、存儲過程以及高級映射的優秀持久層框架,緩存是MyBatis提升查詢性能的重要手段之一。本文將從以下幾個方面詳細講解MyBatis緩存的使用方法。
一、MyBatis緩存概述
在MyBatis中,查詢緩存分為Statement緩存和Result緩存。
- Statement緩存,也稱為SQL緩存,是指MyBatis為一個查詢語句所創建的PreparedStatement對象的緩存。
- Result緩存,是指MyBatis緩存查詢結果的緩存,緩存的是映射語句所返回的對象。
二、Statement緩存的使用
Statement緩存是指MyBatis緩存了一個查詢語句所創建的PreparedStatement對象,下次執行同樣的SQL語句,就可以直接從緩存中獲取PreparedStatement對象,而不需要再次創建。在MyBatis的配置文件中,可以開啟或關閉Statement緩存。
以下是開啟Stament緩存的配置示例:
<configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="defaultStatementCacheEnabled" value="true"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings> ...
其中defaultStatementCacheEnabled配置項,就是用於開啟或關閉緩存的開關,將其設置為true即可開啟Statement緩存。
三、Result緩存的使用
Result緩存是指MyBatis緩存查詢結果的緩存,不同於Statement緩存的是,Result緩存緩存的是映射語句所返回的對象,而不是PreparedStatement對象。在MyBatis的配置文件中,可以開啟或關閉Result緩存,同樣可以為每個映射語句單獨配置是否開啟Result緩存。
以下是開啟Result緩存的配置示例:
<configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="localCacheEnabled" value="true"/> <setting name="cacheType" value="PERPETUAL"/> </settings> ...
其中localCacheEnabled配置項用於開啟或關閉Result緩存,cacheType配置項用於配置緩存類型,PERPETUAL表示使用永久緩存,即緩存中的數據一直有效。其他的緩存類型還包括FIFO、LRU、SOFT和WEAK,這裡不做過多介紹。
MyBatis還提供了對緩存的清空和刷新等操作,具體使用方法如下:
- clearLocalCache()方法,用於清空本地緩存。
- clearCache()方法,用於清空所有的緩存(包括本地緩存和二級緩存)。
- flushCache()方法,用於刷新緩存。
四、MyBatis緩存使用的注意點
雖然MyBatis緩存可以提高查詢性能,但是在使用的過程中,需要注意以下幾點:
- 事務開啟後,查詢的結果會放在事務所在的緩存中,該緩存會在事務提交或回滾時被清空。
- 對於一個映射語句的查詢結果,只有滿足所有的查詢參數都一樣,才會是同一個緩存。
- 對於自己手寫的SQL語句,如果語句中使用到了參數,那麼MyBatis會將該參數的值作為SQL語句的一個部分,來生成一個PreparedStatement,這時候如果多次執行用到了不同的參數,那麼會生成不同的PreparedStatement和緩存。
五、總結
MyBatis緩存是優化查詢性能的重要手段之一,通過學習本文的內容,我們可以清楚的了解到MyBatis緩存的使用方法及注意事項,對於開發者來說,深度掌握MyBatis緩存的使用方法,不僅能夠提高查詢性能,更能為系統的可維護性和可擴展性帶來自身的提升。
原創文章,作者:SSYQC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361646.html