/*
     *缓存
     *  一级缓存(本地缓存),sqlSession级别的缓存,一级缓存是一直开启的.
     *      与数据库同一次会话期间查询到的数据会放在本地缓存中。
     *      以后如果需要获取相同的数据,直接从缓存中取,没必要再去查询数据库
     *       
     *      一级缓存的几种失效情况(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询)
     *          1. sqlSession不同,一个sqlSession是一个一级缓存.不同的sqlSession是不同的一级缓存
     *          2. sqlSession相同,查询条件不同(当前一级缓存中还没有这个数据)
     *          3. sqlSession相同,但两次查询之间执行了增删改操作(这次增删改可能对原来数据有影响)
     *          4. sqlSession相同,手动清除了一级缓存(缓存清空)
     *  二级缓存:(全局缓存)
     */

失效情况一:不同的sqlSession

@Testpublic void testFirstLevelCache() throws IOException{String resource = "mybatis-config.xml";InputStream ins = Resources.getResourceAsStream(resource);SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(ins);SqlSession openSession = sf.openSession();try{EmployeePlusMapper em = openSession.getMapper(EmployeePlusMapper.class);Employee e1 = em.getEmpByDepnos(7369);// 1. sqlSession不同,一个sqlSession是一个一级缓存.不同的sqlSession是不同的一级缓存// 新建的sqlSessionSqlSession openSession2 = sf.openSession();EmployeePlusMapper em2 = openSession2.getMapper(EmployeePlusMapper.class);Employee e2 = em2.getEmpByDepnos(7369);System.out.println(e1 == e2);}finally{openSession.close();}}

失效情况二:sqlSession相同,查询条件不同

@Testpublic void testFirstLevelCache() throws IOException{String resource = "mybatis-config.xml";InputStream ins = Resources.getResourceAsStream(resource);SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(ins);SqlSession openSession = sf.openSession();try{EmployeePlusMapper em = openSession.getMapper(EmployeePlusMapper.class);Employee e1 = em.getEmpByDepnos(7369);// sqlSession相同,    查询条件不一样Employee e2 = em.getEmpByDepnos(7499);System.out.println(e1 == e2);}finally{openSession.close();}}

失效情况三:sqlSession相同,但两次查询之间执行了增删改操作

@Testpublic void testFirstLevelCache() throws IOException, ParseException{String resource = "mybatis-config.xml";InputStream ins = Resources.getResourceAsStream(resource);SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(ins);SqlSession openSession = sf.openSession();try{EmployeePlusMapper em = openSession.getMapper(EmployeePlusMapper.class);Employee e1 = em.getEmpByDepnos(7369);// 执行增加操作SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date dd = formatter.parse("2019-04-03");Employee employee = new Employee("1","tom","grammer",7902,dd,800.0);em.addEmp(employee);// sqlSession相同, 查询条件也一样Employee e2 = em.getEmpByDepnos(7369);System.out.println(e1 == e2);}finally{openSession.close();}}

失效情况四:sqlSession相同,手动清除了一级缓存

@Testpublic void testFirstLevelCache() throws IOException, ParseException{String resource = "mybatis-config.xml";InputStream ins = Resources.getResourceAsStream(resource);SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(ins);SqlSession openSession = sf.openSession();try{EmployeePlusMapper em = openSession.getMapper(EmployeePlusMapper.class);Employee e1 = em.getEmpByDepnos(7369);// 手动清除一级缓存openSession.clearCache();// sqlSession相同,    查询条件也一样Employee e2 = em.getEmpByDepnos(7369);System.out.println(e1 == e2);}finally{openSession.close();}}

mybaits二十二:一级缓存失效的几种情况相关推荐

  1. MyBatis一级缓存失效的几种情况

    MyBatis一级缓存失效的几种情况 文章目录 MyBatis一级缓存失效的几种情况 1 MyBatis一级缓存概述 2 四种失效的基本情况 3 几种特殊情况 1 MyBatis一级缓存概述 MyBa ...

  2. [mybatis]缓存_一级缓存_一级缓存失效的四种情况

    1.sqlSession不同 @Testpublic void test05() throws IOException {SqlSessionFactory sqlSessionFactory = g ...

  3. 【MySQL从入门到精通】【高级篇】(二十)适合创建索引的11种情况不适合创建索引的7种情况,万字长文

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  4. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  5. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  6. Python入门(二十二)- 常见模块2(正则表达式及容器)

    二十二 常见模块2(正则表达式及容器) 22.1 正则表达式及re模块 正则表达式(Regular Expression)用于描述一种字符串匹配模式(Pattern),它可以用于检查一个字符串是否含有 ...

  7. Atitit 知识与学科的分类 杜威十进分类法 图书分类法已经采用二十二个大类 目录 1.1. 类知识的积累是一个从少到多的过程 1 1.2. 杜威十进分类法(Dewey Decimal Class

    Atitit 知识与学科的分类 杜威十进分类法 图书分类法已经采用二十二个大类 目录 1.1. 类知识的积累是一个从少到多的过程 1 1.2. 杜威十进分类法(Dewey Decimal Classi ...

  8. (二十二)admin-boot项目之集成just-auth实现第三方授权登录

    (二十二)集成just-auth实现第三方授权登录 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

最新文章

  1. jemter接口并发数怎么算_JMeter学习使用(1) - 接口GET请求并发测试
  2. 如何替换所有出现的字符串?
  3. python软件安装步骤-Linux中Python 环境软件包安装步骤
  4. windows下添加yaf扩展,生成yaf框架
  5. CAN词典 - CANdictionary
  6. char *与char []
  7. Java笔记-JNI中简单的参数与返回值处理
  8. Java、JS、OC、Flutter的Base64编码和解码
  9. 【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放
  10. javaw java_我可以找出java程序是使用java还是javaw启动的
  11. nanomsg实验——pubsub
  12. veracrypt取消加密卷_VeraCrypt 加密个人隐私(便携式 )
  13. 97年的世界黑客编程大赛第一名的作品-Mekka 【代码+使用】
  14. python写后端提供api_python写后端api
  15. POJ 2395 Out of Hay 最小生成树 Kruskal
  16. 2022年O2O平台还值得做吗
  17. vhost dpdk 共享内存
  18. (Linux无线网卡WIFI上网 三 )嵌入式Linux下的WIFI使用
  19. 学生HTML个人网页作业作品下载 HTML5+CSS大作业——个人网页(4页)
  20. 南航移动Redis-Cluster趟坑记

热门文章

  1. 新技能get!判断盒子的实际大小及位置。。。
  2. Hibernate的延迟检索和立即检索
  3. PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)
  4. Android Binder的使用
  5. C#正则表达式编程(三):Match类和Group类用法
  6. [转] Jenkins实战演练之Windows系统节点管理
  7. Lua 之string库
  8. 融合了距离矢量和链路状态两种路由选择协议的优点
  9. 2013 Multi-University Training Contest 6 部分解题报告
  10. msyql主从同步实践