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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【学习笔记】mybatis中的缓存介绍和使用

發布時間:2024/9/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】mybatis中的缓存介绍和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 介紹
    • 一級緩存和二級緩存
    • 讓一級緩存失效的方法
    • 二級緩存的使用
    • 清空或者跳過二級緩存的3種方式


介紹

什么是緩存?
緩存就是存儲數據的一個地方(稱作:Cache),當程序要讀取數據時,會首先從緩存中獲取,有則直接返回,否則從其他存儲設備中獲取,緩存最重要的一點就是從其內部獲取數據的速度是非常快的,通過緩存可以加快數據的訪問速度。比如我們從db中獲取數據,中間需要經過網絡傳輸耗時,db server從磁盤讀取數據耗時等,如果這些數據直接放在jvm對應的內存中,訪問是不是會快很多。
mybatis中的緩存
通常情況下mybatis會訪問數據庫獲取數據,中間涉及到網絡通信,數據庫從磁盤中讀取數據,然后將數據返回給mybatis,總的來說耗時還是挺長的,mybatis為了加快數據查詢的速度,在其內部引入了緩存來加快數據的查詢速度

一級緩存和二級緩存

mybatis中分為一級緩存和二級緩存。
一級緩存是SqlSession級別的緩存,在操作數據庫時需要構造 sqlSession對象,在對象中有一個數據結構(HashMap)用于存儲緩存數據,不同的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。每個SqlSession都有自己單獨的一級緩存,多個SqlSession之間的一級緩存是相互隔離的,互不影響,mybatis中一級緩存是默認自動開啟的。
一級緩存工作原理:在同一個SqlSession中去多次去執行同樣的查詢,每次執行的時候會先到一級緩存中查找,如果緩存中有就直接返回,如果一級緩存中沒有相關數據,mybatis就會去db中進行查找,然后將查找到的數據放入一級緩存中,第二次執行同樣的查詢的時候,會發現緩存中已經存在了,會直接返回。一級緩存的存儲介質是內存,是用一個HashMap來存儲數據的,所以訪問速度是非常快的

二級緩存是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

讓一級緩存失效的方法

1.當執行增刪改操時,mybatis會將當前SqlSession一級緩存中的所有數據都清除。
2.SqlSession.clearCache清理一級緩存
SqlSession.clearCache()方法會將當前SqlSession一級緩存中的所有數據清除。
3.Select元素的flushCache置為true
將Mapper xml中select元素的flushCache屬性置為true的時候,每次執行這個select元素對應的查詢之前,mybatis會將當前SqlSession中一級緩存中的所有數據都清除。注意:select元素這個屬性的默認值是false。

<select id="getList2" flushCache="true" resultType="com.javacode2018.chat05.demo9.model.UserModel" parameterType="map"> SELECT id,name,age FROM t_user <where> <if test="id!=null"> AND id = #{id} </if> <if test="name!=null and name.toString()!=''"> AND name = #{name} </if> <if test="age!=null"> AND age = #{age} </if> </where> </select>

二級緩存的使用

一級緩存使用上存在局限性,必須要在同一個SqlSession中執行同樣的查詢,一級緩存才能提升查詢速度,如果想在不同的SqlSession之間使用緩存來加快查詢速度,此時我們需要用到二級緩存了。
一二級緩存共存時查詢原理
一二級緩存如果都開啟的情況下,數據查詢過程如下:

  • 當發起一個查詢的時候,mybatis會先訪問這個namespace對應的二級緩存,如果二級緩存中有
    數據則直接返回,否則繼續向下
  • 查詢一級緩存中是否有對應的數據,如果有則直接返回,否則繼續向下
  • 訪問db獲取需要的數據,然后放在當前SqlSession對應的二級緩存中,并且在本地內存中的另外一個地方存儲一份(這個地方我們就叫TransactionalCache)
  • 當SqlSession關閉的時候,也就是調用SqlSession的close方法的時候,此時會將TransactionalCache中的數據放到二級緩存中,并且會清空當前SqlSession一級緩存中的數據。
  • 清空或者跳過二級緩存的3種方式

    當二級緩存開啟的時候,在某個mapper xml中添加cache元素之后,這個mapper xml中所有的查詢都默認開啟了二級緩存,那么我們如何清空或者跳過二級緩存呢?3種方式如下:

  • 對應的mapper中執行增刪改查會清空二級緩存中數據
  • select元素的flushCache屬性置為true,會先清空二級緩存中的數據,然后再去db中查詢數據,然后將數據再放到二級緩存中
  • select元素的useCache屬性置為true,可以使這個查詢跳過二級緩存,然后去查詢數據,但是不會清空二級緩存數據
  • 總結

    以上是生活随笔為你收集整理的【学习笔记】mybatis中的缓存介绍和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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