【MyBatis框架】缓存 —— 一级缓存

缓存是提升系统性能的重要手段,MyBatis中的一级缓存和二级缓存提供了高效的数据访问。一级缓存默认开启,同一SqlSession内的查询会复用结果,避免重复数据库操作。二级缓存则在不同SqlSession间共享数据,需要手动配置。测试显示,多次查询同一记录只会执行一次SQL,验证了缓存的有效性。
摘要由CSDN通过智能技术生成

什么是缓存?

缓存是存储数据的硬件或软件组件,以便将来可以提供更快的数据请求;可以在缓存中找到请求的数据时,会发生缓存命中,而当无法找到时,则会发生缓存丢失。缓存命中是通过从缓存中读取数据来实现的,这比重新计算结果或从较慢的数据存储中读取数据要快;因此,缓存中提供的请求越多,系统执行得越快。


MyBatis缓存:

  • MyBatis可以很方便地定制和配置缓存,极大地提高查询效率。
  • MyBatis中有两个级别的缓存,一级缓存二级缓存
    (1)默认情况下,只有一级缓存是开启的(本地缓存,sqlsession级别
    (2)二级缓存需要手动配置开启,是namespace级别的。二级缓存可以通过Cache接口定义二级缓存。

一级缓存:

  • 默认开启,不能关闭,不用手动开启。
  • 一级缓存又叫本地缓存同一个sqlSession查询到的数据会放在本地缓存中,如果后面的查询需要获取相同的数据,就从缓存中获取,不会再去查询数据库。
  • select语句的结果会被保存到缓存中。
  • 增删改语句会刷新缓存
  • 最少使用的缓存会被清除,使用LRU算法清除。
  • 查询不同的xml,会刷新缓存。
  • 手动清理缓存sqlSession.clearCache();
    在这里插入图片描述

测试:

查询两次相同的记录,在日志中查看语句执行了几次。

      @org.junit.Test
       public  void test1(){
          SqlSession sqlSession=MyBatisUtils.getSqlSession();
          UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
          User user1=userMapper.queryUserById(1);
            System.out.println(user1);
            User user2=userMapper.queryUserById(1);
            System.out.println("================================");
            System.out.println(user2);
            System.out.println(user1==user1);

            sqlSession.close();
       }

如图,查询语句只执行了一次,由此可见,第二次查询是从缓存中获取的信息在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_树先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值