MyBatis中一级缓存和其失效的几种情况
MyBatis的一级缓存:(默认开启)
MyBatis的一级缓存是SqlSession级别的
即通过同一个SqlSession查询的数据会被缓存于SqlSession的缓存中
再次使用同一条SqlSession查询同一条数据
会从缓存中获取(增加了查询效率)
使一级缓存失效的4种情况:
* 1) 不同的SqlSession对应不同的一级缓存
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
CacheMapper mapper = sqlSession.getMapper(CacheMapper.class);
Emp emp = mapper.getEmpById(1);
System.out.println(emp);
SqlSession sqlSession1 = SqlSessionUtil.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp2 = mapper1.getEmpById(1);
System.out.println(emp2);
*
* 2) 同一个SqlSession但是查询条件不同
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
CacheMapper mapper = sqlSession.getMapper(CacheMapper.class);
Emp emp = mapper.getEmpById(1);
System.out.println(emp);
sqlSession.clearCache();
Emp emp1=mapper.getEmpById(2);
System.out.println(emp1);
*
* 3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
* 任意一次增删改会改变数据库中的数据,
* 无论增删改有没有影响到当前数据,
* 再次查询该信息会重新去数据库中查询
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
CacheMapper mapper = sqlSession.getMapper(CacheMapper.class);
Emp emp = mapper.getEmpById(1);
System.out.println(emp);
sqlSession.clearCache();
mapper.insertEmp(new Emp(null,"小白",25,"男"));
Emp emp1=mapper.getEmpById(1);
System.out.println(emp1);
* 4) 同一个SqlSession两次查询期间手动清空了缓存
* sqlSession.clearCache();
分类:
MyBatis学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理