欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis的一級(jí)緩存和二級(jí)緩存原理分析與使用

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

Mybatis的一級(jí)緩存和二級(jí)緩存

Mybatis會(huì)將相同查詢條件的SQL語(yǔ)句的查詢結(jié)果存儲(chǔ)在內(nèi)存或者某種緩存介質(zhì)中,當(dāng)下次遇到相同的SQL時(shí)不執(zhí)行該SQL,而是直接從緩存中獲取結(jié)果,減少服務(wù)器的壓力,尤其是在查詢?cè)蕉唷⒕彺婷新试礁叩那闆r下,使用緩存對(duì)性能的提高更明顯。

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

請(qǐng)?zhí)砑訄D片描述

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

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

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

-- 傳入的statementid。
-- 查詢時(shí)要求的結(jié)果集中的結(jié)果范圍
-- 這次查詢所產(chǎn)生的最終要傳遞給Preparedstatement的Sql語(yǔ)句字符串
-- 傳遞的參數(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);
    }

請(qǐng)?zhí)砑訄D片描述

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

    @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);
    }

請(qǐng)?zhí)砑訄D片描述

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

2 二級(jí)緩存

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

請(qǐng)?zhí)砑訄D片描述

請(qǐng)?zhí)砑訄D片描述

2.1 二級(jí)緩存配置

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

2.2 二級(jí)緩存特點(diǎn)

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

2.3 配置二級(jí)緩存

在mybatis-config.xml文件中標(biāo)簽配置開(kāi)啟二級(jí)緩存。cacheEnabled的值就是true,可省略

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

在映射文件中添加

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

2.4 測(cè)試

請(qǐng)?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對(duì)象查詢
        MybatisUtil.closeSqlSession();
        SqlSession sqlSession2=MybatisUtil.getSqlSession();
        UserDao userDao2 = sqlSession2.getMapper(UserDao.class);
        Users users2 = userDao2.selectUsersById(1);
        System.out.println(users2);
    }

請(qǐng)?zhí)砑訄D片描述

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

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

相關(guān)文章

  • Hadoop環(huán)境配置之hive環(huán)境配置詳解

    Hadoop環(huán)境配置之hive環(huán)境配置詳解

    這篇文章主要介紹了Hadoop環(huán)境配置之hive環(huán)境配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java構(gòu)造器方法深入理解

    Java構(gòu)造器方法深入理解

    這篇文章主要介紹了Java構(gòu)造器方法深入理解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 超詳細(xì)講解Java秒殺項(xiàng)目登陸模塊的實(shí)現(xiàn)

    超詳細(xì)講解Java秒殺項(xiàng)目登陸模塊的實(shí)現(xiàn)

    這是一個(gè)主要使用java開(kāi)發(fā)的秒殺系統(tǒng),項(xiàng)目比較大,所以本篇只實(shí)現(xiàn)了登陸模塊,代碼非常詳盡,感興趣的朋友快來(lái)看看
    2022-03-03
  • 使用Spring Security控制會(huì)話的方法

    使用Spring Security控制會(huì)話的方法

    在本文中,我們將說(shuō)明Spring Security如何允許我們控制HTTP會(huì)話。這篇文章主要介紹了使用Spring Security控制會(huì)話 ,需要的朋友可以參考下
    2019-05-05
  • spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解

    spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解

    這篇文章主要介紹了spring,mybatis事務(wù)管理配置與@Transactional注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java中equals和等號(hào)(==)的區(qū)別淺談

    java中equals和等號(hào)(==)的區(qū)別淺談

    java中equals和等號(hào)(==)的區(qū)別淺談,需要的朋友可以參考一下
    2013-05-05
  • @Validated驗(yàn)證List集合的方法示例

    @Validated驗(yàn)證List集合的方法示例

    這篇文章主要介紹了@Validated驗(yàn)證List集合的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java編程 中流對(duì)象選取規(guī)律詳解

    java編程 中流對(duì)象選取規(guī)律詳解

    下面小編就為大家?guī)?lái)一篇java編程 中流對(duì)象選取規(guī)律詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Java中BEAN與EJB的區(qū)別淺析

    Java中BEAN與EJB的區(qū)別淺析

    這篇文章主要介紹了Java中BEAN與EJB的區(qū)別淺析,本文總結(jié)了它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • springboot注冊(cè)攔截器所遇到的問(wèn)題

    springboot注冊(cè)攔截器所遇到的問(wèn)題

    這篇文章主要介紹了springboot注冊(cè)攔截器的方法及所遇到的問(wèn)題,需要的朋友可以參考下
    2018-07-07

最新評(píng)論