1. 程式人生 > >mybatis 一級快取和二級快取

mybatis 一級快取和二級快取

一級快取也叫sqlsession快取,預設是一直開啟的,無法關閉

1、不同sqlsession的快取是不能共用的

2、相同sqlsession中,兩次查詢之間如果有增刪改動作,快取也會失效,會重新查詢資料庫

二級快取也叫全域性快取,namespace快取,預設是關閉的,而且pojo類需要實現序列化介面

工作機制:

當一個sqlsession查詢出資料,在關閉sqlsession後,會把快取放入到二級快取中,在sqlsession關閉之前,全域性快取是沒有這個快取的

1、在mapper.xml中配置cache資訊,在xml中配置了cache資訊才會快取這個namespace

2、只有sqlsession關閉後,快取才會放入二級快取中

為什麼不推薦使用二級快取?

二級快取是以namespace為單位的,不同namespace下的操作互不影響。

多表操作會有快取問題

解疑:

針對一個表的某些操作不在他獨立的namespace下進行。

例如在UserMapper.xml中有大多數針對user表的操作。但是在一個XXXMapper.xml中,還有針對user單表的操作。

這會導致user在兩個名稱空間下的資料不一致。如果在UserMapper.xml中做了重新整理快取的操作,在XXXMapper.xml中快取仍然有效,如果有針對user的單表查詢,使用快取的結果可能會不正確。

更危險的情況是在XXXMapper.xml做了insert,update,delete操作時,會導致UserMapper.xml中的各種操作充滿未知和風險。