MyBatis緩存機制原理
MyBatis緩存機制原理是將第一次從數據庫SQL查詢的結果數據保存到緩存(內存中),當下一次SQL查詢和第一次相同,如果緩存中有數據則直接獲取,而不再從數據庫獲取,從而減少數據庫訪問頻率,大大提升數據庫性能。
一級緩存(Sqlsession級別)
- 一級緩存是Sqlsession級別的緩存,不同的Sqlsession對象之間的緩存數據時互不影響的。
- 當Sqlsession對象釋放后,該Sqlsession對象中的一級緩存也就不存在了。
二級緩存(Mapper級別)
- 二級緩存是Mapper級別的緩存。多個Sqlsession對象SQL語句查詢數據庫結果會存放二級緩存區域,而多個Sqlsession對象可以共用二級緩存。
- 二級緩存是多個Sqlsession對象共用的。其作用范圍是Mapper的同一個namespace,不同的Sqlsession對象兩次執行相同namespace下的SQL語句,第一次執行會將數據庫中查詢結果數據存儲到二級緩存中,第二次會從二級緩存中獲取數據,而不再從數據庫中獲取,從而提高效率。
MyBatis 緩存使用注意事項
-
只能在只有單表操作的表上使用緩存
-
查詢操作遠大於更新,插入和修改查找操作的情況下使用緩存
-
避免使用二級緩存(多表操作)
多表查詢一定不能使用二級緩存,會導致查詢結果不正確,出現臟數據。
MyBatis延時加載
延時加載又叫懶加載(也叫按需加載),也就是說先加載主表信息,需要的時候,再去加載從表信息。代碼中有查詢語句,當執行到查詢語句時,並不是馬上去數據庫中查詢,而是根據設置的延時策略將查詢向后推遲。
延時加載的作用
延時加載只有在用到需要的數據才會真正執行查詢操作,這樣可以大大減輕數據庫服務器的訪問壓力,提高數據庫的性能。