首頁  >  文章  >  Java  >  深入理解Mybatis一級緩存

深入理解Mybatis一級緩存

高洛峰
高洛峰原創
2017-01-23 09:33:301543瀏覽

客戶端向資料庫伺服器傳送相同的sql查詢語句,如果每次都去存取資料庫,會導致效能的降低。 

那麼怎麼提高呢?

mybatis為我們提供了一級快取的策略

在一個sqlSession開啟和關閉之間,sqlSession對象內部(其實是Executor)會維護一個快取的對象,當查詢資料時候,先從快取中尋找是否存在該條數據,存在就直接取出來,不存在,向資料庫發送sql查詢, 然後將查詢後的數據存入緩存,和返回給程式。

這樣會存在一個問題:

如果在第一次和第二次查詢期間,有程序更改了要查訊的數據庫的數據,就會引起讀取的數據是錯誤的,也就是

臟讀,其實是mybatis在sqlSession執行commit()方法後會清空這個快取。第二次去查詢,還是會從資料庫查詢.

也可以手動呼叫sqlSession的clearCache()方法清除快取

小範例:

@Test
  public void testCacheLever1() throws Exception{
    SqlSession session = factory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    //第一次请求,查询id为1的用户
    User user = mapper.findUserById(1);
    System.out.println(user);
    //更改数据,会清空缓存
    user.setUsername("yyyy");
    mapper.updateUser(user);
    session.commit();
    //第二次查询会从缓存中找
    User user2 = mapper.findUserById(1);
    System.out.println(user2);
    session.close();
  }

   

就清空了。這要怎麼使用快取來提高效率呢?

好了,下篇文章要跟大家介紹mybatis二級快取。

以上所述是小編給大家介紹的Mybatis一級緩存,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對PHP中文網的支持!

更多深入理解Mybatis一級快取相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn