码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 系列六、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. }

     

  • 相关阅读:
    Day626.连接池使用注意事项 -Java业务开发常见错误
    解锁潜力:创建支持Actions接口调用的高级GPTs
    JVM第十八讲:调试排错 - Java 问题排查之工具单
    多线程ThreadPoolExecutor使用说明
    OpenCV计算机视觉学习(14)——浅谈常见图像后缀(png, jpg, bmp)的区别(opencv读取语义分割mask的坑)
    Linux系统调优详解(一)——系统调优概述与Top命令详解
    【数学建模学习笔记【集训十天】之第四天】
    SkinnedMeshRenderer骨骼动画的模型位置问题
    vue项目中使用lottie
    vscode 上传项目到gitlab
  • 原文地址:https://blog.csdn.net/HelloWorld20161112/article/details/134179381
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号