mybatis学习笔记六——mybatis缓存cache

mybatis分为一级缓存、二级缓存

语句顺序:先查二级缓存 → 再查一级缓存 → 最后才去数据库查找

一、一级缓存(默认状态开启) SqlSession级别缓存。开启一个SqlSession级别的map进行保存

      生效:使用同一个SqlSession并且没有做过增删改(第一次查询与第二次查询之间)、或者手动清除缓存的操作(sqlSession.clearCache();),一级缓存都生效。

   失效:
1.SqlSession不同,以下语句创建两次视为不同
SqlSession sqlSession = sqlSessionFactory.openSession();

   2.SqlSession相同,查询条件不同(如果不同条件查询一次后,就会生成缓存)

   3.SqlSession相同,两次查询之间执行了增删改

   4.SqlSession相同,手动清除一级缓存。执行了: sqlSession.clearCache();

二、二级缓存(基于namespace,一个namespace对应一个二级缓存)

    1.当会话关闭时,一级缓存的数据将被保存到二级缓存中(前提是二级缓存被开启)

     2.开启二级缓存

        2.1 mybatis-config.xml配置  cacheEnabled默认为true(如果为false,则关闭二级缓存,但是一级缓存可以正常使用)


    <settings>
        <setting name="cacheEnabled" value="true"></setting>
    </settings>

       2.2 MyBatisMapping.xml配置

 <cache></cache>
<!-- 如果没有在<mapper>中定义cache这个标签就不会开启二级缓存,即使config.xml中配置了开启 -->
<!-- 
  cache属性说明
  eviction="FIFO"
  LRU – 最近最少使用:移除最长时间不被使用的对象。
  FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。 

  flushInterval="60000"
  size="512"
  readOnly="true" 

  flushInterval(刷新间隔)属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。 默认情况是不设置,也就是没有刷新间隔,缓存仅仅会在调用语句时刷新。

size(引用数目)属性可以被设置为任意正整数,要注意欲缓存对象的大小和运行环境中可用的内存资源。默认值是 1024。

readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。 速度上会慢一些,但是更安全,因此默认值是 false。  
    
 -->

     

三、缓存的配置(·以下第一条影响范围最高)

     1.<setting name="cacheEnabled" value="true"></setting> value改为false二级缓存关闭,一级缓存正常

     2.<cache></cache> 必须添加标签,二级缓存才能开启,

     3.<select>标签中的属性useCache="true"如果为false则这条查询语句不使用二级缓存,一级缓存正常

     4.sqlSession.clearCache();清除一级缓存,二级缓存不受限

四、flushCache 将其设置为 true 后,只要语句被调用,都会导致本地缓存(一级缓存)二级缓存被清空,默认值:false。select、insert、update、delete、都能使用flushCache

 

五、sqlSession.close();与sqlSession.clearCache();区别

sqlSession.close();//清除会话
sqlSession.clearCache();//清除一级缓存

六、第三方缓存整合

       因为mybatis做缓存不专业,所以提供了接口给redis等应用

      1)、导入第三方缓存的jar包

      2)、引入第三方缓存的xml配置文件

      3)、在mapper中自定义缓存

<cache type="这里填写第三方缓存的类路径redis"></cache>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值