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