• 系列六、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. }

     

  • 相关阅读:
    python自动化测试 namp端口扫描
    图的概念(1)
    Redis
    开发知识点-Vue-Electron
    Office Word 中的宏
    【面试刷题】——Qt使用的编译器
    当开源项目 Issue 遇到了 DevChat
    springboot项目的properties文件配置项优先级
    8 财政收入预测分析
    Freeswitch中CHANNEL_HANGUP外呼挂断事件
  • 原文地址:https://blog.csdn.net/HelloWorld20161112/article/details/134179381