当前位置: 首页 > news >正文

Mybatis MyBatis框架的缓存 一级缓存

1. 缓存的概念

  1. 缓存的概念

    1. 在内存中临时存储数据,速度快,可以减少数据库的访问次数。
    2. 经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。

2.Mybatis缓存

  • mybatis包含了一个非常强大的查询缓存特性,他可以非常方便的定制和配置缓存。缓存可以极大的提高查询的效率
  • mybatis系统当中默认定义了两级缓存:一级缓存和二级缓存
    • 默认情况之下,只有一级缓存开启(sqlSession级别的缓存)
    • 二级缓存需要手动开启配置,需要局域namespace级别的缓存。

1.一级缓存(也叫本地缓存)

  1. MyBatis的一级缓存也是SqlSession的缓存。

  2. SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。

  3. 查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。

  4. 证明一级缓存的存在,通过用户id查询2次,查看结果。

    public class UserTest {private InputStream in = null;private SqlSession session = null;private UserDao mapper = null;/*** 测试查询所有的方法*/@Testpublic void findById() throws IOException {//加载主配置文件,目的是为了构建SqlSessionFactory对象in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//通过SqlSessionFactory工厂对象创建SqlSesssion对象session = factory.openSession();//通过Session创建UserDao接口代理对象mapper = session.getMapper(UserDao.class);User user1 = mapper.findById(1);System.out.println(user1.toString());System.out.println("-----------------");User user2 = mapper.findById(1);System.out.println(user2.toString());System.out.println(user1 == user2);//释放资源session.close();in.close();}
    }

    缓存失效的情况:

  • sqlSession不同
  • sqlSession相同,查询条件不同
  • sqlSession相同,两次查询之间执行了增删改操作
  • sqlSession相同,手动清除一级缓存
http://www.lryc.cn/news/539974.html

相关文章:

  • Weboffice在线Word权限控制:限制编辑,只读、修订、禁止复制等
  • RT-Thread+STM32L475VET6实现呼吸灯
  • 【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十四章课后题答案
  • 记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘
  • 网工项目实践2.6 广域网需求分析及方案制定
  • 【架构】分层架构 (Layered Architecture)
  • 玩客云 IP查找
  • Android - Handler使用post之后,Runnable没有执行
  • MyBatis-Plus之通用枚举
  • 基于Spring Boot的图书管理系统设计与实现(LW+源码+讲解)
  • 如何在 VS Code 中快速使用 Copilot 来辅助开发
  • 12.1 Android中协程的基本使用
  • 【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步
  • php-fpm
  • Python3测试开发面试题2
  • qt + opengl 给立方体增加阴影
  • Webpack,Vite打包的理解
  • Vue 3 30天精进之旅:Day 25 - PWA支持
  • 机器学习-生命周期
  • 大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
  • 如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈
  • TS中Any和Unknown有什么区别
  • 【Mpx】-环境搭建项目创建(一)
  • PyQt加载UI文件
  • Java面试第二山!《计算机网络》!
  • Mysql基础语句
  • 连接池Java导包
  • 一些耳朵起茧子的名词解释
  • HBuilderX中,VUE生成随机数字,vue调用随机数函数
  • C#发送邮件