mybaits二十二:一级缓存失效的几种情况
/*
*缓存
* 一级缓存(本地缓存),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二十二:一级缓存失效的几种情况相关推荐
- MyBatis一级缓存失效的几种情况
MyBatis一级缓存失效的几种情况 文章目录 MyBatis一级缓存失效的几种情况 1 MyBatis一级缓存概述 2 四种失效的基本情况 3 几种特殊情况 1 MyBatis一级缓存概述 MyBa ...
- [mybatis]缓存_一级缓存_一级缓存失效的四种情况
1.sqlSession不同 @Testpublic void test05() throws IOException {SqlSessionFactory sqlSessionFactory = g ...
- 【MySQL从入门到精通】【高级篇】(二十)适合创建索引的11种情况不适合创建索引的7种情况,万字长文
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.
- 【白话设计模式二十二】解释器模式(Interpreter)
为什么80%的码农都做不了架构师?>>> #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...
- JAVA基础知识总结:一到二十二全部总结
>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...
- Python入门(二十二)- 常见模块2(正则表达式及容器)
二十二 常见模块2(正则表达式及容器) 22.1 正则表达式及re模块 正则表达式(Regular Expression)用于描述一种字符串匹配模式(Pattern),它可以用于检查一个字符串是否含有 ...
- Atitit 知识与学科的分类 杜威十进分类法 图书分类法已经采用二十二个大类 目录 1.1. 类知识的积累是一个从少到多的过程 1 1.2. 杜威十进分类法(Dewey Decimal Class
Atitit 知识与学科的分类 杜威十进分类法 图书分类法已经采用二十二个大类 目录 1.1. 类知识的积累是一个从少到多的过程 1 1.2. 杜威十进分类法(Dewey Decimal Classi ...
- (二十二)admin-boot项目之集成just-auth实现第三方授权登录
(二十二)集成just-auth实现第三方授权登录 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...
最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...
最新文章
- jemter接口并发数怎么算_JMeter学习使用(1) - 接口GET请求并发测试
- 如何替换所有出现的字符串?
- python软件安装步骤-Linux中Python 环境软件包安装步骤
- windows下添加yaf扩展,生成yaf框架
- CAN词典 - CANdictionary
- char *与char []
- Java笔记-JNI中简单的参数与返回值处理
- Java、JS、OC、Flutter的Base64编码和解码
- 【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放
- javaw java_我可以找出java程序是使用java还是javaw启动的
- nanomsg实验——pubsub
- veracrypt取消加密卷_VeraCrypt 加密个人隐私(便携式 )
- 97年的世界黑客编程大赛第一名的作品-Mekka 【代码+使用】
- python写后端提供api_python写后端api
- POJ 2395 Out of Hay 最小生成树 Kruskal
- 2022年O2O平台还值得做吗
- vhost dpdk 共享内存
- (Linux无线网卡WIFI上网 三 )嵌入式Linux下的WIFI使用
- 学生HTML个人网页作业作品下载 HTML5+CSS大作业——个人网页(4页)
- 南航移动Redis-Cluster趟坑记