Mybatis缓存机制

缓存机制简介

  1. Mybatis包含一个非常强大的查询缓存特性,可以方便的进行配置和定制,缓存可以提升查询效率
  2. Mybatis系统中默认定义了两级缓存
    分别是一级缓存和二级缓存
  3. 默认情况下 只有一级缓存(SqlSession级别的缓存也称为本地缓存)开启
  4. 二级缓存需要手动开启和配置,它是基于namespace级别的缓存
  5. 为了提高扩展性。Mybatis定义了缓存接口Cache。我们可以通过Cacahe来定义二级缓存。

一级缓存的使用

  1. List item一级缓存【Local Cache】本地缓存 作用域默认是SqlSession。当Session flush或则是close后,Session中的所有Cacahe将被清空。
  2. 本地缓存不能被关闭,但是可以用clearCache()来清空缓存,或者改变缓存的作用域。
  3. 在Mybatis3.1之后 可以配置本地缓存的作用域。在Mybatis的全局配置文件中配置。设置名:localCacheScope,MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。
  4. 一级缓存的工作机制
    同一次会话期间只要查询过的数据都会保存在当前SqlSession的一个Map中
    Key:hashCode +查询的Sql +编写的sql查询语句+参数
    这里是重点

一级缓存失效的几种情况

  1. 不同的SqlSession 对应不同的一级缓存 —>就是创建的sqlsession不同 即从SqlSessionFactory.oppenSession()拿出两个不同的对象
  2. 同一个SqlSession但是查询条件不同
  3. 同一个SqlSession两次查询期间执行了任何一次增删改操作
  4. 同一个SqlSession两次查询期间手动清了缓存
  5. 同一个SqlSession两次查询期间提交了事务

二级缓存的使用

  1. 二级缓存【second level cache】全局作用域缓存
  2. 二级缓存默认不开启 需要手动配置
  3. Mybatis提供二级缓存的接口以及实现,缓存要求POJO实现Serializable接口
  4. 二级缓存在SqlSession关闭或提交之后才会生效
  5. 二级缓存的使用步骤
    1. 全局配置文件中开启二级缓存
    2. 需要使用二级缓存的映射文件处理使用cache配置缓存
    3. pojo需要实现Serializable接口
    4. 二级缓存在sqlSession关闭或提交之后才会生效
    5. 关闭sqlSession或者提交sqlSession时,将数据缓存到二级缓存
    6. 二级缓存相关属性:
      1. eviction=“FIFO” 清除缓存策略
      2. flushInterval 刷新间隔 单位毫秒
      3. size 应用数目 正整数
      4. readOnly 只读true/false

缓存的相关属性设置

  1. 全局setting的cacheEnabled:配置二级缓存的开关 一级缓存一直是打开的
  2. select 标签的useCache属性:这个属性是用来配置这个select是否使用二级缓存 默认为true 一级缓存是一直使用的
  3. 所有的增删改查标签中的flushCache属性:增删改查默认为flushCache=true。Sql执行后会同时清空一级和二级缓存,默认查询是flushCache=false.
  4. sqlSession.clearCache():只是用来清除一级缓存

整合第三方缓存

  1. 为了提高扩展性。MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存
  2. EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值