溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java之Mybatis的二級(jí)緩存怎么使用

發(fā)布時(shí)間:2023-05-06 11:26:09 來源:億速云 閱讀:131 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“Java之Mybatis的二級(jí)緩存怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java之Mybatis的二級(jí)緩存怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

    緩存的概述和分類

    概述

    緩存就是一塊內(nèi)存空間.保存臨時(shí)數(shù)據(jù)

    為什么使用緩存

    將數(shù)據(jù)源(數(shù)據(jù)庫或者文件)中的數(shù)據(jù)讀取出來存放到緩存中,再次獲取的時(shí)候 ,直接從緩存中獲取,可以減少和數(shù)據(jù)庫交互的次數(shù),這樣可以提升程序的性能!

    緩存的適用情況

    適用于緩存的:經(jīng)常查詢但不經(jīng)常修改的(eg: 省市,類別數(shù)據(jù)),數(shù)據(jù)的正確與否對(duì)最終結(jié)果影響不大的

    不適用緩存的:經(jīng)常改變的數(shù)據(jù) , 敏感數(shù)據(jù)(例如:股市的牌價(jià),銀行的匯率,銀行卡里面的錢)等等

    MyBatis緩存類別

    一級(jí)緩存:它是sqlSession對(duì)象的緩存,自帶的(不需要配置)不可卸載的(不想使用還不行). 一級(jí)緩存的生命周期與sqlSession一致。

    二級(jí)緩存:它是SqlSessionFactory的緩存。只要是同一個(gè)SqlSessionFactory創(chuàng)建的SqlSession就共享二級(jí)緩存的內(nèi)容,并且可以操作二級(jí)緩存。二級(jí)緩存如果要使用的話,需要我們自己手動(dòng)開啟(需要配置的)。

    二級(jí)緩存的使用

    1.在 mybatis的核心配置文件中開啟二級(jí)緩存

        <!--**因?yàn)?nbsp;cacheEnabled 的取值默認(rèn)就為 true**,所以這一步可以省略不配置。為 true 代表開啟二級(jí)緩存;為 false 代表不開啟二級(jí)緩存。  -->
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

    2.在Dao映射文件中配置使用二級(jí)緩存

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.itheima.dao.UserDao">
        <!--配置二級(jí)緩存-->
        <cache/>
       
        <select id="findAll" resultType="user">
            select * from t_user
        </select>
     
        <delete id="deleteById" parameterType="int">
            delete from t_user where uid=#{id}
        </delete>
    </mapper>

     3.要進(jìn)行二級(jí)緩存的Pojo類必須實(shí)現(xiàn)Serializable接口

    public class User implements Serializable {
        private int uid;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        // 省略setter,getter,構(gòu)造...等方法
    }

    4.測(cè)試使用二級(jí)緩存

    測(cè)試代碼

    @Test
          public void testFindAll() throws Exception{
              // 1.加載mybatis核心配置文件
              InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
     
              // 2.創(chuàng)建SqlSessionFactoryBuilder對(duì)象
              SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
     
              // 3.構(gòu)建SqlSessionFactory對(duì)象
              SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
     
              // 4.獲取SqlSession對(duì)象
              SqlSession sqlSession = sqlSessionFactory.openSession();
     
              // 5.獲得dao接口的代理對(duì)象
              UserDao userDao = sqlSession.getMapper(UserDao.class);
     
              // 6.執(zhí)行sql語句,得到結(jié)果
              List<User> list = userDao.findAll();
              for (User user : list) {
                  System.out.println("user = " + user);
              }
              sqlSession.close();//清除一級(jí)緩存
     
              System.out.println("分割線----------------------------------");
     
              SqlSession sqlSession2 = sqlSessionFactory.openSession();
              UserDao userDao2 = sqlSession2.getMapper(UserDao.class);
              List<User> userList2 = userDao2.findAll();
              for (User user : userList2) {
                  System.out.println(user);
              }
              // 7.釋放資源
              sqlSession2.close();
          }

    - 測(cè)試結(jié)果:

    Java之Mybatis的二級(jí)緩存怎么使用

    - 經(jīng)過上面的測(cè)試,我們發(fā)現(xiàn)執(zhí)行了兩次查詢,并且在執(zhí)行第一次查詢后,我們關(guān)閉了一級(jí)緩存,再去執(zhí)行第二次查詢時(shí),我們發(fā)現(xiàn)并沒有對(duì)數(shù)據(jù)庫發(fā)出 sql 語句,所以此時(shí)的數(shù)據(jù)就只能是來自于我們所說的二級(jí)緩存。

    5.測(cè)試關(guān)閉二級(jí)緩存

    - 測(cè)試代碼

       @Test
          public void testFindAll() throws Exception{
              // 1.加載mybatis核心配置文件
              InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
     
              // 2.創(chuàng)建SqlSessionFactoryBuilder對(duì)象
              SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
     
              // 3.構(gòu)建SqlSessionFactory對(duì)象
              SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
     
              // 4.獲取SqlSession對(duì)象
              SqlSession sqlSession = sqlSessionFactory.openSession();
     
              // 5.獲得dao接口的代理對(duì)象
              UserDao userDao = sqlSession.getMapper(UserDao.class);
     
              // 6.執(zhí)行sql語句,得到結(jié)果
              List<User> list = userDao.findAll();
              for (User user : list) {
                  System.out.println("user = " + user);
              }
              sqlSession.close();//清除一級(jí)緩存
     
              System.out.println("分割線----------------------------------");
     
              SqlSession sqlSession2 = sqlSessionFactory.openSession();
              UserDao userDao2 = sqlSession2.getMapper(UserDao.class);
              userDao2.deleteById(5);// 關(guān)閉二級(jí)緩存
     
              List<User> userList2 = userDao2.findAll();
              for (User user : userList2) {
                  System.out.println(user);
              }
              // 7.釋放資源
              sqlSession2.close();
          }

    - 測(cè)試結(jié)果

    Java之Mybatis的二級(jí)緩存怎么使用

    經(jīng)過上面的測(cè)試,我們發(fā)現(xiàn)執(zhí)行了兩次查詢,并且在執(zhí)行第一次查詢后,我們關(guān)閉了一級(jí)緩存,關(guān)閉二級(jí)緩存,再去執(zhí)行第二次查詢時(shí),我們發(fā)現(xiàn)對(duì)數(shù)據(jù)庫發(fā)出了 sql 語句,所以此時(shí)的數(shù)據(jù)是來自數(shù)據(jù)庫,不是緩存。

    讀到這里,這篇“Java之Mybatis的二級(jí)緩存怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI