Spring配置Mybatis後,一級快取失效的原因
阿新 • • 發佈:2019-02-05
原因:()轉自http://blog.csdn.net/jield/article/details/50163327)
1.mybatis的一級快取生效的範圍是sqlsession,是為了在sqlsession沒有關閉時,業務需要重複查詢相同資料使用的。一旦sqlsession關閉,則由這個sqlsession快取的資料將會被清空。
2.spring對mybatis的sqlsession的使用是由template控制的,sqlsession又被spring當作resource放在當前執行緒的上下文裡(threadlocal),spring通過mybatis呼叫資料庫的過程如下:
a,我們需要訪問資料
b,spring檢查到了這種需求,於是去申請一個mybatis的sqlsession(資源池),並將申請到的sqlsession與當前執行緒繫結,放入threadlocal裡面
c,template從threadlocal獲取到sqlsession,去執行查詢
d,查詢結束,清空threadlocal中與當前執行緒繫結的sqlsession,釋放資源
e,我們又需要訪問資料
f,返回到步驟b
通過以上步驟後發現,同一執行緒裡面兩次查詢同一資料所使用的sqlsession是不相同的,所以,給人的印象就是結合spring後,mybatis的一級快取失效了。