-
一級緩存類圖:
藍色框為MyBatis定義的接口。
綠色框為實現一種裝飾模式。
結論:MyBatis一級緩存存儲的實際上是Map數據結構。
查看全部 -
事務隔離級別
結論:MyBatis以及緩存反而提升了事務隔離級別。
查看全部 -
同一種情況,數據庫事務發生不可重復讀,MyBatis的情況。
MyBatis解決了數據庫事務不可重復讀的問題。
查看全部 -
數據庫事務的不可重復讀:
不可重復讀:在事務1期間事務2更新了數據,導致事務1兩次查詢解雇偶不一致。簡稱,讀提交。
查看全部 -
同一種情況,數據庫事務臟讀和MyBatis臟讀情況對比
MyBatis解決了數據庫事務臟讀的問題。
查看全部 -
數據庫事務的臟讀(不帶MaBatis緩存):
臟讀:事務1讀取了事務2已經修改但尚未提交的數據,如果事務2發生回滾則事務1讀取的數據就錯誤數據,也稱臟數據。簡稱,讀未提交。
查看全部 -
注意:由于關閉關閉Session、執行Commit、執行Rollback都會清空MyBatis的一級緩存,所以實際上 MyBatis一級緩存的生命周期是在數據庫事務的生命周期之內的。
查看全部 -
網傳MyBatis一級緩存的臟讀 示例(實際不會發生)
查看全部 -
clearCache主動清楚
在執行SqlSession.clearCache()之后,緩存會被清空,第二次查詢會查詢庫。
查看全部 -
update更新
在執行insert、update、delete操作之后,緩存會被清空,第二次查詢會查詢數據庫。
注意:與表無關。即使我們要查詢的和要更新的表不是同一張表,MyBatis依然會清空所有的一級緩存。
查看全部 -
rollback回滾
在執行SqlSession.rollback()之后,緩存會被清空,第二次查詢會查詢數據庫。
查看全部 -
commit提交
在執行SqlSession.commit()之后,緩存會被清空,第二次查詢會查詢數據庫。
查看全部 -
關閉Session的代碼類圖
通過反射,驗證了關閉Session的時候確實是會清空緩存。
查看全部 -
MyBatis產生緩存,實際是通過圖中的方法
查看全部 -
課程總結
MyBatis通過以下五種條件判斷某兩次查詢時完全相同的查詢:
StatementID、查詢參數、分頁參數、SQL語句、環境
查看全部
舉報