MyBatis(九)缓存

基于白嫖:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂

1 简介

每一次查询都需要去数据库取,消耗较大;将数据库部分数据放到内存中暂存,称之为缓存;经常查询并且不经常改变的数据可以建议使用缓存;

2 mybatis缓存

Mybatis系统中默认定义了两级缓存:一级缓存二级缓存

  • 默认情况,开启一级缓存。(SQLSession级别,也被称为本地缓存);
  • 二级缓存需要手动开启配置,基于namespace级别的缓存;
  • 为了提高扩展性,Mybatis定义了缓存接口Cache,可以通过实现Cache接口来自定义二级缓存;

3 一级缓存

public void getBlogTest() {
    try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
        //建立映射
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        Blog blog1 = mapper.getBlogById(1);
        Blog blog2 = mapper.getBlogById(1);
        logger.debug(blog1==blog2);
    }
}

返回的是trueblog1blog2是同一个对象,即在堆内存中是一个对象;

  • 映射语句文件中所有的select语句的结果会被缓存;
  • insertupdatedelete语句会清空缓存;
  • sqlSession.clearCache();会清空缓存;
  • 当缓存满时,使用最近最少使用算法(LRU)来清除不需要的缓存;

一级缓存的作用域就是在一个SqlSession中,作用域可以说是非常小的;

4 二级缓存

也叫全局缓存,需要在mybatis-config.xml中开启二级缓存。

<!--设置-->
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

mapper.xml中开启缓存;

<cache eviction="FIFO" flushInterval="60000"/>

可以设置更新策略,可以设置每隔多少时间就刷新的策略;

  • 二级缓存的作用域是一个namespace,也就是说是针对一个接口设计的;
  • 一次查询流程:先看二级缓存有无,无则再看一级缓存有没有,无则去数据库查,存入一级缓存,sqlSession关闭则存入二级缓存;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值