Mybatis--二级缓存(namespace级别)& 序列化

1. Mybatis--二级缓存(namespace级别)

  • 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存
  • 基于namespace级别的缓存,一个名称空间,对应一个二级缓存

工作机制

  • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中
  • 如果会话关闭了,这个会员对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中
  • 新的会话查询信息,就可以从二级缓存中获取内容
  • 不同的mapper查询出的数据会放在自己对应的缓存中

一级缓存开启(SqlSession级别的缓存,也称为本地缓存)

  • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。
  • 为了提高可扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来定义二级缓存。

1.1 使用二级缓存


1.1.1 开启全局缓存(虽然默认是开启的,但是为了方便理解,还是显示的开启)

在这里插入图片描述

mybatis-config.xml

<!--显示的开启全局缓存-->
<setting name="cacheEnabled" value="true"/>
12

在这里插入图片描述


1.1.2 在Mapper.xml中使用缓存

可以使用默认的配置

<cache/>
1

使用默认的配置时,由于readOnly(只读)默认值是 false。需要通过序列化)返回缓存对象的拷贝。所以相关的实体类需要实现Serializable接口,使其支持序列化

序列化可以将一个对象转化成一段字符串编码,传输或者做存储处理,使用时再进行反序列,而字符串不用序列化的原因是如果你看过javaSE的源码,你就知道,字符串是已经实现了Serializable接口的,所以它已经是序列化了的


也可以自定义配置

<!--在当前Mapper.xml中使用二级缓存-->
<cache
       eviction="FIFO"
       flushInterval="60000"
       size="512"
       readOnly="true"/>

在这里插入图片描述
测试:
在这里插入图片描述
BlogMapper.xml
在这里插入图片描述

测试方法:

    @org.junit.Test
    public void test01() {
        SqlSession sqlSession1 = MybatisUtils.getSqlSession();
        BlogMapper mapper1 = sqlSession1.getMapper(BlogMapper.class);

        Map map = new HashMap();
        map.put("title", "微服务");
        List<Blog> blogs = mapper1.queryBlogIf(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
        sqlSession1.close();

        System.out.println("==================");
        SqlSession sqlSession2 = MybatisUtils.getSqlSession();

        BlogMapper mapper2 = sqlSession2.getMapper(BlogMapper.class);
        map = new HashMap();
        map.put("title", "微服务");
        blogs = mapper2.queryBlogIf(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }

        sqlSession2.close();
    }

在这里插入图片描述


1.1.3 小结

  • 只要开启了二级缓存,在同一个Mapper下就有效
  • 所有的数据都会放在一级缓存中
  • 只有当前会话提交,或者关闭的时候,才会提交到二级缓存中

转载:Mybatis–二级缓存(namespace级别)& 序列化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值