mybatis 事務和緩存
阿新 • • 發佈:2018-02-08
數據庫 mit commit 我們 指針 產生 bsp 內存 所有
mybatis緩存介紹
一級緩存
即session緩存,作用域為 Session,當 Session flush 或 close 之後,該Session中的所有 Cache 就將清空,默認開啟。
二級緩存是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的
在業務層執行方法時,我們通常會在方法上加事務註解@Transactional,這樣的話進入方法時,就會從數據庫連接池拿取鏈接信息,建立連接,轉換屬性,將autoCommit設置為true,下面進行的數據庫操作都在這個事務下,每次查詢的結果都會以namespace的形式標識保存在緩存區域中(內存),下次如果有sql發出,就會去緩存中對比namespace,如果匹配有,就直接拿取結果返回,這就是緩存,因此我遇到的問題就是這樣產生的,第一次查出來的結果保存在namespace中,我進行了修改,由於對象的操作可以認為都是通過指針(做個比喻),對對象存放位置進行了操作,即是操作了緩存區域中的對象,所以後面的查詢走緩存返回的就是修改後的數據;
緩存是什麽時候失效呢?在事務結束時,事務結束時就相當於執行了commit命令,sqlsession關閉,緩存失效,再進行的查詢就直接發出sql,不會走緩存了
mybatis 事務和緩存