最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis的一級緩存和二級緩存原理分析與使用

 更新時間:2021年11月26日 10:03:58   作者:老達摩#  
mybatis-plus 是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級和二級緩存

Mybatis的一級緩存和二級緩存

Mybatis會將相同查詢條件的SQL語句的查詢結(jié)果存儲在內(nèi)存或者某種緩存介質(zhì)中,當下次遇到相同的SQL時不執(zhí)行該SQL,而是直接從緩存中獲取結(jié)果,減少服務器的壓力,尤其是在查詢越多、緩存命中率越高的情況下,使用緩存對性能的提高更明顯。

Mybatis緩存分為一級緩存和二級緩存,一級緩存是將結(jié)果緩存在SqlSession對象中,二級緩存是存儲在SqlSessionFactory對象中。默認情況下,Mybatis開啟一級緩存,不開啟二級緩存當數(shù)據(jù)量更大時,可以借助第三方緩存技術(shù)協(xié)助保存Mybatis的二級緩存數(shù)據(jù)

請?zhí)砑訄D片描述

如果SqlSession調(diào)用了close()方法,會釋放掉一級緩存PerpetualCache對象,一級緩存將不可用如果SqlSession調(diào)用了clearCache(),會清空PerpetualCache對象中的數(shù)據(jù),但是該對象仍可使用 SqlSession中執(zhí)行了任何一個update操作(update()、delete()、insert()),都會清空PerpetualCache對象的數(shù)據(jù),但是該對象可以繼續(xù)使用

1 Mybatis如何判斷兩次查詢是完全相同的查詢

如果以下條件完全一樣,Mybatis則認為是相同的查詢

-- 傳入的statementid。
-- 查詢時要求的結(jié)果集中的結(jié)果范圍
-- 這次查詢所產(chǎn)生的最終要傳遞給Preparedstatement的Sql語句字符串
-- 傳遞的參數(shù)值

@Test
    public void testCacheOne(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        Users users = userDao.selectUsersById(1);
        Users users1 = userDao.selectUsersById(1);
        System.out.println(users);
        System.out.println(users1);
    }

請?zhí)砑訄D片描述

查詢兩次,數(shù)據(jù)庫查詢了一次

    @Test
    public void testCacheOne(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        Users users = userDao.selectUsersById(1);
        //清空緩存
        sqlSession.clearCache();
        Users users1 = userDao.selectUsersById(1);
        System.out.println(users);
        System.out.println(users1);
    }

請?zhí)砑訄D片描述

清空緩存,數(shù)據(jù)庫查詢了兩次

2 二級緩存

? Mybatis的二級緩存是Application級別的緩存,它可以提高對數(shù)據(jù)庫查詢的效率,二級緩存SqlSessionFactory上緩存,可以是由一個SqlSessionFactory創(chuàng)建的不同的SqlSession之間共享緩存數(shù)據(jù)。默認不開啟。SqlSession在執(zhí)行commit()或者close()的時候?qū)?shù)據(jù)放入到二級緩存

請?zhí)砑訄D片描述

請?zhí)砑訄D片描述

2.1 二級緩存配置

Mybatis實現(xiàn)二級緩存的實體類必須是可序列化的,也就是要求實現(xiàn)Serializable接口。在映射配置文件中配置就可以開啟緩存了

2.2 二級緩存特點

映射語句文件中的所有select查詢語句都會被緩存
insert、update、delete語句會刷新緩存
二級緩存是以namespace為單位,不同namespace下的操作互不影響
如果在加入<cache/>標簽的前提下讓個別select元素不適用緩存,可以使用useCache屬性,設(shè)置為false

2.3 配置二級緩存

在mybatis-config.xml文件中標簽配置開啟二級緩存。cacheEnabled的值就是true,可省略

<settings>
    <setting name="cacheEnable" value="true"/>
</settings>

在映射文件中添加

<mapper namespace="com.zd.dao.UserDao">
    <cache/>
</mapper>

2.4 測試

請?zhí)砑訄D片描述

    @Test
    public void testCacheTwo(){
        SqlSession sqlSession=MybatisUtil.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        Users users = userDao.selectUsersById(1);
        System.out.println(users);
        //關(guān)閉SqlSession后,重新獲取SqlSession對象查詢
        MybatisUtil.closeSqlSession();
        SqlSession sqlSession2=MybatisUtil.getSqlSession();
        UserDao userDao2 = sqlSession2.getMapper(UserDao.class);
        Users users2 = userDao2.selectUsersById(1);
        System.out.println(users2);
    }

請?zhí)砑訄D片描述

查詢了一次,可以看出不同的SqlSession之間共享緩存數(shù)據(jù)。

到此這篇關(guān)于Mybatis的一級緩存和二級緩存原理分析與使用的文章就介紹到這了,更多相關(guān)Mybatis 緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven生成及安裝jar包到本地倉庫的方法

    Maven生成及安裝jar包到本地倉庫的方法

    這篇文章主要介紹了Maven生成及安裝jar包到本地倉庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Spring整合Quartz Job以及Spring Task的實現(xiàn)方法

    Spring整合Quartz Job以及Spring Task的實現(xiàn)方法

    下面小編就為大家分享一篇Spring整合Quartz Job以及Spring Task的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot實現(xiàn)文件在線預覽功能的全過程

    SpringBoot實現(xiàn)文件在線預覽功能的全過程

    我們開發(fā)業(yè)務系統(tǒng)的時候,經(jīng)常有那種文檔文件在線預覽的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot實現(xiàn)文件在線預覽功能的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java單例模式與破壞單例模式概念原理深入講解

    Java單例模式與破壞單例模式概念原理深入講解

    單例模式(Singleton?Pattern)是?Java?中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。這種模式涉及到一個單一的類,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建
    2023-02-02
  • Swift洗牌動畫效果的實現(xiàn)方法

    Swift洗牌動畫效果的實現(xiàn)方法

    這篇文章主要介紹了Swift洗牌動畫效果的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2016-12-12
  • springboot Interceptor攔截器excludePathPatterns忽略失效

    springboot Interceptor攔截器excludePathPatterns忽略失效

    這篇文章主要介紹了springboot Interceptor攔截器excludePathPatterns忽略失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中從JSON轉(zhuǎn)Java實體的多種方法詳解

    Java中從JSON轉(zhuǎn)Java實體的多種方法詳解

    在現(xiàn)在的日常開發(fā)中不管前端還是后端,JSON 格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在,這篇文章主要給大家介紹了關(guān)于Java中從JSON轉(zhuǎn)Java實體的多種方法,需要的朋友可以參考下
    2023-12-12
  • JVM調(diào)整java虛擬機可使用的最大內(nèi)存的方法

    JVM調(diào)整java虛擬機可使用的最大內(nèi)存的方法

    本文主要介紹了調(diào)整JVM的內(nèi)存參數(shù)來優(yōu)化Java應用程序的性能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • Mybatis初始化知識小結(jié)

    Mybatis初始化知識小結(jié)

    Mybatis的初始化過程就是加載自己運行時所需要的配置信息的過程,這篇文章主要介紹了Mybatis初始化知識小結(jié),需要的朋友可以參考下
    2021-10-10
  • Java虛擬機調(diào)用Java主類的main()方法

    Java虛擬機調(diào)用Java主類的main()方法

    這篇文章主要介紹了Java虛擬機調(diào)用Java主類的main()方法,前一篇文章我們介紹了關(guān)于Java虛擬機HotSpot
    2021-11-11

最新評論

静海县| 尚义县| 荔浦县| 曲靖市| 曲阜市| 西和县| 柏乡县| 承德县| 德庆县| 南通市| 阿拉善盟| 司法| 同心县| 兴国县| 精河县| 观塘区| 海林市| 绥棱县| 兴安县| 太白县| 阜新| 江西省| 开远市| 华宁县| 内黄县| 琼中| 新宁县| 安多县| 合水县| 长垣县| 遵义县| 怀集县| 东源县| 潜江市| 安达市| 磐石市| 郓城县| 清水县| 英德市| 郯城县| 安平县|