日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis学习8之缓存

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis学习8之缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mybatis緩存

MyBatis 內置了一個強大的事務性查詢緩存機制,當你查詢了一次數據時,他會保存到緩存中,當你第二次查詢這個數據時,它不會去數據庫查找,而是直接從緩存中去取!

一級緩存

默認情況下,只啟用了本地的會話緩存,它僅僅對一個會話中的數據進行緩存。可以理解為sqlsession級別的!

@Testpublic void queryUserById(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.queryUserById(1);//第一次查詢1號用戶System.out.println("第一次查詢1號用戶user為"+user);System.out.println("---------------------------------------------------------------------");User user2 = mapper.queryUserById(1);//第二次查詢1號用戶System.out.println("第二次查詢1號用戶user2為"+user2);System.out.println("---------------------------------------------------------------------");System.out.println("user==user2為"+(user==user2));//數據庫只查詢了一次sqlSession.close();}

數據庫只查詢了一次

二級緩存(xml級別)

要啟用全局的二級緩存,只需要在你的 SQL 映射文件中添加一行:

<cache/>

基本上就是這樣。這個簡單語句的效果如下:

  • 映射語句文件中的所有 select 語句的結果將會被緩存。
  • 映射語句文件中的所有 insert、update 和 delete 語句會刷新緩存。
  • 緩存會使用最近最少使用算法(LRU, Least Recently Used)算法來清除不需要的緩存。
  • 緩存不會定時進行刷新(也就是說,沒有刷新間隔)。 緩存會保存列表或對象(無論查詢方法返回哪種)的 1024 個引用。
  • 緩存會被視為讀/寫緩存,這意味著獲取到的對象并不是共享的,可以安全地被調用者修改,而不干擾其他調用者或線程所做的潛在修改。
<!--開啟二級緩存,作用于整個namespace(整個xml)的--><cache eviction="FIFO"flushInterval="6000"size="512"readOnly="true"/><!--只要開啟了二級緩存,在同一個Mapper下就有效所有的數據都會放到一級緩存中只有當會話提交或者關閉的時候,才會提交到二級緩存中-->
緩存失效原因
@Testpublic void cache(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.queryUserById(1);//第一次查詢1號用戶System.out.println("第一次查詢1號用戶user為"+user);//mapper.updateUser(new User(2, "aaa", "a123bbb"));//修改操作sqlSession.clearCache();//手動清理緩存System.out.println("---------------------------------------------------------------------");User user2 = mapper.queryUserById(1);//第二次查詢1號用戶System.out.println("第二次查詢1號用戶user2為"+user2);System.out.println("---------------------------------------------------------------------");System.out.println("user==user2為"+(user==user2));//false 數據庫查詢了2次/*緩存失效的原因:1.查詢不同的東西2.增刪改查操作可能會改變原有的數量,所有必定刷新緩存3.查詢不同的Mapper.xml4.手動清理緩存*/sqlSession.close();//一級緩存是默認開啟,只在sqlSession中有效。}

數據庫查詢了兩次

開啟二級緩存效果
public void cache2(){//開啟二級緩存SqlSession sqlSession = MybatisUtils.getSqlSession();SqlSession sqlSession2 = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.queryUserById(1);//sqlSession第一次查詢1號用戶System.out.println("第一次查詢1號用戶user為"+user);System.out.println("---------------------------------------------------------------------");sqlSession.close();//關閉后,一級緩存里面就沒有了,提交到二級緩存UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);User user2 = mapper2.queryUserById(1);//sqlSession2查詢1號用戶,從二級緩存里獲取System.out.println("第二次查詢1號用戶user2為"+user2);System.out.println("---------------------------------------------------------------------");sqlSession2.close();//順序:用戶先從二級緩存取,在到一級緩存,都沒有就去查詢數據庫}

數據庫只查詢了一次

原理

用戶查詢數據時先通過二級緩存,然后在到一級緩存,最后都沒有就去數據庫查詢。

作者有話說

博客創作不易,希望看到這里的讀者動動你的小手點個贊,如果喜歡的小伙伴可以一鍵三連,作者大大在這里給大家謝謝了。

總結

以上是生活随笔為你收集整理的mybatis学习8之缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。