1. 程式人生 > >Spring配置Mybatis後,一級快取失效的原因

Spring配置Mybatis後,一級快取失效的原因

原因:()轉自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的一級快取失效了。