Mybatis緩存
- Mybatis的一級緩存是指SqlSession。存儲做用域是Session,會對同一個SQL語句進行Session緩存,來提升執行效率,一級緩存的做用域是一個SqlSession。Mybatis默認開啓一級緩存。在同一個SqlSession中,執行相同的查詢SQL,第一次會去查詢數據庫,並寫到緩存中;第二次直接從緩存中取。當執行SQL時兩次查詢中間發生了增刪改操做,則SqlSession的緩存清空。
- Mybatis的二級緩存是指mapper映射文件。二級緩存的做用域是同一個namespace下的mapper映射文件內容,多個SqlSession共享。Mybatis須要手動設置啓動二級緩存。在同一個namespace下的mapper文件中,執行相同的查詢SQL,第一次會去查詢數據庫,並寫到緩存中;第二次直接從緩存中取。當執行SQL時兩次查詢中間發生了增刪改操做,則二級緩存清空。
- 一級緩存區域是根據SqlSession爲單位劃分的。每次查詢會先去緩存中找,若是找不到,再去數據庫查詢,而後把結果寫到緩存中。Mybatis的內部緩存使用一個HashMap,key爲hashcode+statementId+sql語句。Value爲查詢出來的結果集映射成的java對象。SqlSession執行insert、update、delete等操做commit後會清空該SQLSession緩存。
- 二級緩存是mapper級別的。Mybatis默認是沒有開啓二級緩存。
第一次調用mapper下的SQL去查詢用戶信息。查詢到的信息會存到該mapper對應的二級緩存區域內。java
第二次調用相同namespace下的mapper映射文件中相同的SQL去查詢用戶信息。會去對應的二級緩存內取結果。sql
若是調用相同namespace下的mapper映射文件中的增刪改SQL,並執行了commit操做。此時會清空該namespace下的二級緩存。數據庫