在同一個sqlSession執行一個相同的查詢時,Mybatis有一級緩存,不會去查數據庫,由此引發的一個bug


 

 此場景是一個線程入庫result,另外有一個線程在查result表,看是否有待執行的result

Mybatis對緩存提供支持,但是在沒有配置的默認情況下,它只開啟一級緩存,一級緩存只是相對於同一個SqlSession而言。所以在參數和SQL完全一樣的情況下,我們使用同一個SqlSession對象調用一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次查詢后,MyBatis會將其放在緩存中,以后再查詢的時候,如果沒有聲明需要刷新,並且緩存沒有超時的情況下,SqlSession都會取出當前緩存的數據,而不會再次發送SQL到數據庫。

所以這段代碼在3這里會有問題,可使用其他方式判斷待執行的result,或者去掉第一層判斷,直接使用2,3判斷,或者在對應的select標簽里加上flushCache="true"。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM