MyBatis的一級緩存和二級緩存是兩種不同級別的緩存機制。
一級緩存是在同一個SqlSession內部的緩存,它默認是開啟的。在執行查詢操作時,查詢的結果會被緩存到一級緩存中,下次執行相同的查詢操作時,會直接從緩存中獲取結果,而不需要再次查詢數據庫。一級緩存的生命周期是和SqlSession綁定的,當SqlSession提交或關閉時,一級緩存就會失效。
二級緩存是在同一個Mapper命名空間下的緩存,它是跨SqlSession的緩存機制。一級緩存只能在同一個SqlSession中生效,而二級緩存可以在多個SqlSession中共享緩存數據。當開啟了二級緩存后,在執行查詢操作時,查詢的結果會被緩存到二級緩存中,下次執行相同的查詢操作時,會先從二級緩存中獲取結果,如果緩存中不存在,則會再查詢數據庫,并將查詢結果放入緩存中。二級緩存的生命周期是和Mapper命名空間綁定的,在同一個Mapper命名空間下的SqlSession執行了update、insert、delete等操作時,會清空對應的二級緩存。
總結來說,一級緩存是在SqlSession級別的緩存,生命周期短暫,只對同一個SqlSession有效;二級緩存是在Mapper命名空間級別的緩存,生命周期相對長久,可以在多個SqlSession中共享緩存數據。