MyBatis一級緩存和二級緩存是兩種緩存機制,用于提高MyBatis的查詢性能。
一級緩存是MyBatis默認啟用的緩存機制,它是在SqlSession級別的緩存,即同一個SqlSession對象中進行的查詢會被緩存下來。一級緩存是基于對象的引用來實現的,在同一個SqlSession中,如果兩次查詢的參數相同,那么第二次查詢會直接從一級緩存中獲取結果,而不需要再次發送SQL語句到數據庫。一級緩存的生命周期與SqlSession相同,當SqlSession關閉后,一級緩存會被清空。
二級緩存是在SqlSessionFactory級別的緩存,即不同的SqlSession之間可以共享同一個二級緩存。二級緩存是基于對象的序列化來實現的,當一個查詢結果被放入二級緩存后,會被序列化成字節流并保存在內存中。當其他SqlSession進行相同的查詢時,會嘗試從二級緩存中獲取結果,如果存在緩存則直接返回結果,否則才會發送SQL語句到數據庫。二級緩存的生命周期與SqlSessionFactory相同,當應用程序關閉時,二級緩存會被清空。
需要注意的是,二級緩存的默認開啟是需要手動配置的,而且對于部分特殊情況的查詢,二級緩存可能不會被使用到,比如帶有動態SQL語句的查詢或者使用了一些特殊的查詢方式。