mybatis相同的sql查詢第二次查不出結果

2021-09-19 16:35:41 字數 611 閱讀 2363

mybatis快取介紹[1]:

一級快取:即session快取,作用域為 session,當 session flush 或 close 之後,該session中的所有 cache 就將清空,預設開啟。注意:整合spring(使用mybatis-spring)時:

每次查詢spring會重新建立sqlsession,所以一級快取是不生效的;

而當開啟事務時,spring會使用同乙個sqlsession做查詢,所以這個情況下一級快取是生效的。

問題原因:上述提到了mybatis的快取機制,檢視專案配置後發現問題在於第一次查詢到結果會放到快取中,程式對查到的結果list進行了remove操作,所以快取中的list會發生變化,第二次查詢時會從快取中將操作過的list查詢出來(mybatis返回的實體類的記憶體位址是相同的),故而產生了我們不需要的結果,之前專案中使用的是與spring整合的,使用的session是sqlsessiontemplate,這裡是預設關閉了一級快取,而今天專案中沒有與spring整合,建立session使用的是sqlsessionfactory的opensession()方法,這裡查詢時缺省會先從快取中查詢,綜上,第二次我們查到的只是快取中的資料[2]。

SQL 查詢資料相同的記錄的SQL

現在有乙個表t base user,主鍵user id為自動增長型別,login name為使用者登入名。現在資料庫中login name出現了重名現象,現在要將這些記錄找出來,sql如下 select from t base user where user id in select user id...

MyBatis動態sql查詢

什麼是動態sql mybatis核心 對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接 組裝。需求public class userpo if test userpo.id null and id if if where select id findusercount parame...

mybatis 動態Sql的模糊查詢

1 where teacher.tname like concat concat 2 distinct的使用 下面先來看看例子 table id name 1 a2 b 3 c4 c 5 b比如我想用一條語句查詢得到name不重複的所有資料,那就必須使用distinct去掉多餘的重覆記錄。selec...