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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

浅谈MyBatis一级缓存

發布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈MyBatis一级缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是一級緩存

每一次在和數據庫進行會話的過程中,MyBatis 都會創建一個SqlSession對象。同一次會話期間,只要是查詢過的數據,都會保存在當前SqlSession對象的一個Map中。所以在一次會話的過程中,如果我們對一條查詢SQL 語句進行了多次執行,經過判斷后和之前執行的查詢語句相同,并且在緩存中存在該SQL 語句的執行結果,那么這次查詢就不會再從數據庫中獲取數據,而是直接從緩存中獲取數據。

因為一級緩存是建立在SqlSession對象中的,所以也可以說一級緩存是一個SqlSession級別的緩存。在默認的情況下,一級緩存是開啟的。

下面我們就來體驗一下一級緩存的作用。

二、一級緩存初體驗

因為一級緩存是默認開啟的,所以不需要我們進行任何配置。

mapper 接口:

Employee getEmpById(Integer id);

SQL 映射文件:

<select id="getEmpById" resultType="com.jas.mybatis.bean.Employee">SELECT * FROM t_employee WHERE id = #{id}</select>

測試代碼:

// 用于創建SqlSession 對象private SqlSession getSqlSession() throws IOException {String resource = "mybatis-config.xml";InputStream is = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}@Testpublic void testCache() throws IOException {SqlSession sqlSession = getSqlSession();EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);// 從數據庫中獲得id 為1 的員工信息Employee employee1 = employeeMapper.getEmpById(1);System.out.println(employee1);// 再一次從數據庫中獲得id 為1 的員工信息Employee employee2 = employeeMapper.getEmpById(1);System.out.println(employee2);sqlSession.close();}

上面的測試過程中一共對id為1 的員工信息進行了兩次查詢,并且在中間過程中沒有進行其他的操作,下面我們通過SQL 日志來看看執行的過程。

雖然我們執行了兩次查詢,但是從執行結果來看,其實只發送了一條SQL 語句,在第二次獲得員工信息的時候并不是從數據庫中獲取數據,而是直接在一級緩存中獲得數據,這就是一級緩存起到的作用。

三、一級緩存失效

我們知道,一級緩存是一個SqlSession級別的緩存,所以一級緩存在工作的過程中會有一定的局限。

一級緩存失效的情況:

1.只對當前SqlSession對象生效,對于其他的SqlSession來說一級緩存是不起作用的。

2.是同一個SqlSession對象,但是執行的是不同條件的SQL 查詢語句。

3.同一個SqlSession對象執行同一條件的查詢語句,但中間執行了增刪改的操作,之前一級緩存中的數據會失效。如果執行的是不同條件的查詢語句,一級緩存仍然生效,并且會把新的查詢數據也加入到一級緩存中。

4.多次相同查詢語句在執行期間通過sqlSession.clearCache();方法清除了緩存。

5.SqlSession 對象調用了close()方法,當前會話結束,一級緩存不再生效。

對于上面的幾種情況,一級緩存都是不起作用的。所以在處理業務的時候要根據需求,具體分析能不能使用一級緩存。

四、總結

這篇博文主要對MyBatis 中的一級緩存進行了一些介紹,并把常見的一級緩存失效的幾種情況也進行了描述,希望能夠為學習緩存的小伙伴提供一些幫助。如果想要更深了解一些關于一級緩存原理的知識,可以點擊下面的鏈接,總結的很清楚,前排致敬前輩。

《深入理解mybatis原理》 MyBatis的一級緩存實現詳解 及使用注意事項

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的浅谈MyBatis一级缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

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