我知道mybatis有緩存,當默認執行更新的時候它會刷新緩存。那麼當執行select ... for update時,它會刷新緩存嗎?如果答案是否定的,那麼如果我首先執行選擇,然後立即執行select ... for update,那麼mybatis將訪問數據庫或擊中高速緩存?當執行select my ... mybatis flush cache時默認更新嗎?
0
A
回答
0
緩存刷新默認行爲與實際執行的SQL,但是執行的語句的類型爲Mybatis。
無論SQL是<select>
或@Select
然後在不指定flushCache
屬性(進入@Options
用於註釋風格),默認行爲適用:沒有沖水。並且對於<update>
或@Update
緩存默認是刷新的。
無論如何,你的情況下,SELECT
和SELECT FOR UPDATE
是不同的SQL字符串,然後當調用兩者時,即使結果集相同,數據庫也會被命中,緩存將SQL字符串和參數關聯到結果。更改SQL字符串=>新命中,更改參數=>新命中。如果語句<select id=stmt1>
和另一個語句<select id=stmt2>
產生相同的SQL字符串並且使用相同的參數值調用,則在同一會話期間並且在它們之間不發生刷新操作時,第二個調用應該會觸發緩存。這可以通過在mapper.namespace軟件包上啓用調試日誌來檢查。
緩存在ORM(Hibernate ..)中不起作用:由實體類型和主鍵引用的緩存。
緩存持續最多直到會話結束。
在會話期間重複請求相同的數據(相同的語句/參數)時很方便,不需要存儲結果供下次使用,只需再次調用語句,緩存將只保存對結果的訪問權限。
相關問題
- 1. 當執行php時更改默認輸出文件夾php
- 2. jqGrid更新表/默認更新時默認「加載」消息
- 3. AspxGridview更新行默認值
- 4. magento緩存管理中的「Flush Magento Cache」和「Flush Cache Storage」有什麼區別?
- 5. Guava Cache即時更新屬性更新
- 6. myBatis select to existing object
- 7. 目標com.google.appengine的執行默認cli:appengine-maven-plugin:1.9.32:更新失敗
- 8. 在活動事務中執行Flush()
- 9. 設置當前時間爲默認值和更新值
- 10. 更新文件時Git更改默認umask
- 11. 禁用執行:默認jar
- 12. 在運行時可以更改C++類的默認值嗎?
- 13. 當.text值更改時,UITextView行距回到默認值
- 14. 當時區被省略時,xs:時間默認爲UTC嗎?
- 15. 在java中運行時更新默認的字符集編碼?
- 16. jQuery的實時更改和默認加載,默認不工作
- 17. 休眠更新與默認值
- 18. makefile的新默認行爲
- 19. 當更新時,Linq會替換新行嗎?
- 20. 更改默認行爲5.4
- 21. Maven Surefire默認執行測試用例嗎?
- 22. MyBatis錯誤:在更新數據庫中的一行時
- 23. 更新行執行
- 24. 創建新EC2實例時可以更改默認卷類型嗎?
- 25. 默認軌控制器#動作執行時間可靠和正確嗎?
- 26. 我們可以更新docker的默認配置嗎?
- 27. 安裝時更改Ssms2008默認設置
- 28. 當提供JavaScript文件時,默認情況下gzip安全嗎
- 29. 在Python線程中執行多個stdout w/flush
- 30. Maven關閉默認目標執行
謝謝,我還有一個問題,如果我執行選擇*從表中id = 1更新@select,結果將被保存在緩存中。我想知道是否我在同一個會話中執行了兩次相同的SQL,第二次會碰到緩存或訪問數據庫。如果第二次擊中緩存,則會出現錯誤。 –
你是對的,我已經澄清了關於這一點的答案。 – blackwizard