MyBatis 缓存部分

本文介绍了MyBatis的缓存概念,包括一级缓存和二级缓存的工作原理及失效情况。一级缓存默认开启,基于SqlSession,而二级缓存基于namespace,需要手动配置。文中还详细讨论了何时一级缓存会失效,并通过单元测试验证了缓存行为。最后提到了自定义缓存,例如使用Ehcache作为第三方缓存解决方案。
摘要由CSDN通过智能技术生成

首先:
1、什么是缓存 [ Cache ]?

存在内存中的临时数据。(实例化引用 实质也是地址)

将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。

2、为什么使用缓存?

减少和数据库的交互次数,减少系统开销,提高系统效率。

3、什么样的数据能使用缓存?

经常查询并且不经常改变的数据。
反之,经常在改变的数据 就不能使用缓存 意义不大,比如增删改

MyBatis 中的缓存:
1、MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。 为了使它更加强大而且易于配置。
2、默认定义了两级缓存:一级缓存(也即sqlsession级别—— 本地缓存)和二级缓存。
3、而二级缓存需要手动开启和配置,他是基于namespace级别的缓存。
为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存

对一级缓存的单元测试:
该种单元测试早已在一开始在测试类中就使用到了 SQL session的每次创建 使用就已经存在一级缓存 是默认的 无法取消。
缓存中的数据始终是有相应的地址内容,那么通过对地址的比较再由打印语句System.out.println();能够直观的对其测试——布尔值 false true的输出。

简单的实体类对应 mapper接口 及其.xml文件 绑定 测试类中进行:

   public void testGetTeacher(){
   
        SqlSession session = MyBatisTool.getSqlSession();
        teachermapper mapper = session.getMapper(teachermapper.class);
        teacher teacher1 = mapper.getTeacher(1);
        teacher teacher2=mapper.getTeacher(1);
        System.out.println(teacher1==teacher2);

控制台输出 true 。 第二次的查询并没有直接去数据库而是通过一级缓存。

一级缓存失效情况:
没有使用到当前的一级缓存,效果就是,还需要再向数据库中发起一次查询请求!

1、sqlSess

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值