• 系列六、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经典百题之画直线
    Vue-dvadmin-d2-crud-plus-自定义后台菜单-添加页面
    用工具实现 Mock API 的整个流程
    ​力扣解法汇总779. 第K个语法符号
    估计、偏差和方差
    Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》
    想用iPhone录视频同时拍照片?这篇教你!附送10个苹果手机技巧
    Python 基于 OpenCV 视觉图像处理实战 之 图像相关的基本概念,以及图像的基础操作 二
    HTML语义标签
  • 原文地址:https://blog.csdn.net/HelloWorld20161112/article/details/134179381