中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java之Mybatis的二級緩存怎么使用

發布時間:2023-05-06 11:26:09 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

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

    緩存的概述和分類

    概述

    緩存就是一塊內存空間.保存臨時數據

    為什么使用緩存

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

    緩存的適用情況

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

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

    MyBatis緩存類別

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

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

    二級緩存的使用

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

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

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

    <?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">
        <!--配置二級緩存-->
        <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.要進行二級緩存的Pojo類必須實現Serializable接口

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

    4.測試使用二級緩存

    測試代碼

    @Test
          public void testFindAll() throws Exception{
              // 1.加載mybatis核心配置文件
              InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
     
              // 2.創建SqlSessionFactoryBuilder對象
              SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
     
              // 3.構建SqlSessionFactory對象
              SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
     
              // 4.獲取SqlSession對象
              SqlSession sqlSession = sqlSessionFactory.openSession();
     
              // 5.獲得dao接口的代理對象
              UserDao userDao = sqlSession.getMapper(UserDao.class);
     
              // 6.執行sql語句,得到結果
              List<User> list = userDao.findAll();
              for (User user : list) {
                  System.out.println("user = " + user);
              }
              sqlSession.close();//清除一級緩存
     
              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();
          }

    - 測試結果:

    Java之Mybatis的二級緩存怎么使用

    - 經過上面的測試,我們發現執行了兩次查詢,并且在執行第一次查詢后,我們關閉了一級緩存,再去執行第二次查詢時,我們發現并沒有對數據庫發出 sql 語句,所以此時的數據就只能是來自于我們所說的二級緩存。

    5.測試關閉二級緩存

    - 測試代碼

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

    - 測試結果

    Java之Mybatis的二級緩存怎么使用

    經過上面的測試,我們發現執行了兩次查詢,并且在執行第一次查詢后,我們關閉了一級緩存,關閉二級緩存,再去執行第二次查詢時,我們發現對數據庫發出了 sql 語句,所以此時的數據是來自數據庫,不是緩存。

    讀到這里,這篇“Java之Mybatis的二級緩存怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    壶关县| 莱芜市| 延津县| 册亨县| 化州市| 宝清县| 甘孜县| 滦南县| 衡南县| 盐津县| 辽源市| 社旗县| 曲松县| 彰化市| 鲁山县| 瓮安县| 遂宁市| 邻水| 五华县| 英德市| 威远县| 商城县| 平乐县| 鸡东县| 上犹县| 华安县| 化隆| 涿鹿县| 尼木县| 浦城县| 涟源市| 锡林浩特市| 吉水县| 永寿县| 凌云县| 九龙城区| 来安县| 册亨县| 南华县| 客服| 息烽县|