• 系列六、Mybatis的一级缓存


    一、概述

            Mybatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中), 第二次执行相同的查询时,会从缓存中取数据,不再进行数据库的查询,从而提高查询效率。默认情况下,Mybatis开启了一级缓存。 

    二、一级缓存(生效)案例演示

    2.1、 CacheTest

    1. @Test
    2. public void test1() {
    3. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    4. UserDO u1 = userMapper.getUserById(1);
    5. System.out.println("u1 = " + u1);
    6. System.out.println("===============");
    7. UserDO u2 = userMapper.getUserById(1);
    8. System.out.println("u2 = " + u2);
    9. }

    三、一级缓存(失效)案例(原因)演示

    3.1、两次查询使用的不是同一个sqlSession

    1. /**
    2. * mybatis的一级缓存失效的第一种原因:两次查询使用的不是同一个sqlSession
    3. */
    4. private static void m1() {
    5. SqlSession sqlSession1 = SqlSessionFactoryUtil.getInstance().openSession();
    6. SqlSession sqlSession2 = SqlSessionFactoryUtil.getInstance().openSession();
    7. UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
    8. UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
    9. UserDO u1 = userMapper1.getUserById(1);
    10. System.out.println(u1);
    11. System.out.println("=================");
    12. UserDO u2 = userMapper2.getUserById(1);
    13. System.out.println(u2);
    14. }

    3.2、两次查询之间有增删改的操作

    1. /**
    2. * mybatis的一级缓存失效的第二种原因:两次查询之间有增删改的操作
    3. */
    4. private void m12() {
    5. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    6. UserDO u1 = userMapper.getUserById(1);
    7. System.out.println(u1);
    8. int result = userMapper.delUserById(2);
    9. System.out.println("result = " + result);
    10. UserDO u2 = userMapper.getUserById(1);
    11. System.out.println(u2);
    12. }

    3.3、两次查询的查询条件不一样

    1. /**
    2. * mybatis的一级缓存失效的第三种原因:两次查询的查询条件不一样
    3. */
    4. private void m13() {
    5. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    6. UserDO u1 = userMapper.getUserById(1);
    7. System.out.println(u1);
    8. UserDO u2 = userMapper.getUserById(2);
    9. System.out.println(u2);
    10. }

     

  • 相关阅读:
    vscode中无法识别nglview-js-widgets
    ImageMol
    java计算机毕业设计VUE教育网站设计与实现源码+数据库+系统+lw文档
    拯救打工人的周报焦虑,不用Python,这个工具直接实现自动化
    LeetCode题:1:两数之和
    AVProVideo☀️四、视频播放案例
    jquery 跳转到当前页面指定位置
    MySQL——五、库表操作(上篇)
    【21天算法挑战赛】查找算法——索引查找
    PC_寻址方式
  • 原文地址:https://blog.csdn.net/HelloWorld20161112/article/details/134179381