首先來思考一下,在開啟了二級快取的情況下,一個用戶查詢資料經歷的程序是什么樣的,
我們看一下,下面這張圖:

用戶先去二級快取中去尋找資料,如果找不到再去一級快取尋找資料,如果還是找不到那么去資料庫中進行查詢,
我么具體來看一下:
@Test public void getUserById() { SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.getUserById(10001); System.out.println(user); sqlSession.close(); System.out.println("========================================="); SqlSession sqlSession1 = MyBatisUtil.getSqlSession(); UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class); User user1 = userMapper1.getUserById(10001); System.out.println(user1); sqlSession1.close(); System.out.println("========================================="); SqlSession sqlSession2 = MyBatisUtil.getSqlSession(); UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class); User user2 = userMapper2.getUserById(10003); System.out.println(user2); System.out.println("========================================="); User user3 = userMapper2.getUserById(10003); System.out.println(user3); sqlSession2.close(); }
第一次查詢由于二級快取和一級快取中都沒有,所以要進資料庫查詢;第二次查詢與第一次查詢的資料相同,但不在同一個SqlSession中,并且第一次的SqlSession已經關閉,所以這次查詢直接從二級快取中找到資料;第三次查詢與前兩次查詢都不同,所以二級快取一級快取都找不到資料,需要進資料庫查詢;第四次查詢與第三次查詢相同,并且在同一個SqlSession中,所以二級快取沒有需要的資料,在一級快取中找到資料,
所以以上測驗應該是只需要第一第三訪問兩次資料庫,第二次是從二級快取獲取,第四次是從一級快取獲取,
測驗結果:

沒有問題,
(本文僅作個人學習記錄用,如有紕漏敬請指正)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508978.html
標籤:Java
