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();

posted @   别亦难  阅读(225)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示