MyBatis 快取問題 session

2022-09-07 02:06:10 字數 864 閱讀 3070

當其外部的資料庫連線甚至是資料庫管理系統,對資料庫進行了更改,ibatis(mybatis)的快取如果沒有過期,是不會對資料庫的修改做出相應的?這一點有什麼好的解決方案? 

再簡單的描述一下(假設資料庫系統為mysql),例如有乙個j**a的應用持久層框架是使用ibatis(mybatis)有乙個每個500ms(毫秒)呼叫一次對資料庫中id為100的記錄進行 select 操作,由於快取的時間很長,此時有乙個外部程式,假設此程式為乙個c/c++程式通過mysql c api 連線到當前資料庫(和j**a應用程式同乙個資料庫)它將id為100的記錄刪除了。然而此時j**a應用中每個500ms對此記錄進行select 操作依然有效!這個很鬱悶,ibatis(mybatis)的快取有什麼選項能夠對外部資料庫連線對記錄進行修改或者刪除能讓ibatis(mybatis)主動清除快取?

我也遇到了這個問題。外部程式修改了資料庫之後,mybatis的session不會受到影響。你要避免此影響,只能講session關閉再開啟。

但是,如果mybatis與spring整合在一起後,因為我們的dao繼承了sqlsessiondaosupport,而sqlsessiondaosupport內部sqlsession的實現是使用用動態**實現的,這個動態**sqlsessionproxy使用乙個模板方法封裝了select()等操作,每一次select()查詢都會自動先執行opensession(),執行完close()以後呼叫close()方法,相當於生成了乙個新的session例項,所以我們無需手動的去關閉這個session()(關於這一點見下面mybatis的官方文件),當然也無法使用mybatis的一級快取,也就是說mybatis的一級快取在spring中是沒有作用的.

官方文件摘要

mybatis中的快取問題

關於mybatis基礎我們前面幾篇部落格已經介紹了很多了,今天我們來說乙個簡單的問題,那就是mybatis中的快取問題。mybatis本身對快取提供了支援,但是如果我們沒有進行任何配置,那麼預設情況下系統只開啟了一級快取,一級快取就是同乙個sqlsession執行的相同查詢是會進行快取的,ok,那麼...

mybatis中的快取問題

關於mybatis基礎我們前面幾篇部落格已經介紹了很多了,今天我們來說乙個簡單的問題,那就是mybatis中的快取問題。mybatis本身對快取提供了支援,但是如果我們沒有進行任何配置,那麼預設情況下系統只開啟了一級快取,一級快取就是同乙個sqlsession執行的相同查詢是會進行快取的,ok,那麼...

hibernate快取,mybatis快取詳解

hibernate的快取有一級快取,二級快取,查詢快取。一級快取 很簡單,session級別的快取,通過get,update可以將物件放到一級快取中。二級快取 sessionfactory級別的快取,通過get,list可以將物件放到二級快取中,這裡我必須細講一下,list雖然能夠把物件放入二級快取...