MyBatis缓存

原创 2016年05月31日 14:20:03

MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存:

        一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存。

         二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Application应用(借助第三方缓存功能)。

        

一级缓存的工作机制:

      一级缓存是Session会话级别的,一般而言,一个SqlSession对象会使用一个Executor对象来完成会话操作,Executor对象会维护一个Cache缓存,以提高查询性能。

二级缓存的工作机制:

     如上所言,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章。如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者:CachingExecutor,这时SqlSession使用CachingExecutor对象来完成操作请求。CachingExecutor对于查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果,如果有查询结果,则直接返回缓存结果;如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到缓存中,然后在返回给用户。

MyBatis的二级缓存设计得比较灵活,你可以使用MyBatis自己定义的二级缓存实现;你也可以通过实现org.apache.ibatis.cache.Cache接口自定义缓存;也可以使用第三方内存缓存库,如Memcached等。

 

一级缓存和二级缓存顺序使用:

          请注意,如果你的MyBatis使用了二级缓存,并且你的Mapperselect语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,其次才是一级缓存,即MyBatis查询数据的顺序是:

               二级缓存    ———> 一级缓存——> 数据库

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mybatis+redis缓存配置

  • 2016-09-22 14:52
  • 17KB
  • 下载

MyBatis_sql-resultMap-缓存

  • 2017-05-07 12:50
  • 9.13MB
  • 下载

mybatis二级缓存

与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。 同样是发送同样的查询sql会先去缓存中找,找不到再去查询数据库。 每个namespace的mapper都会有自己的一...

mybatis二级缓存学习

  • 2016-12-05 18:02
  • 39KB
  • 下载

Mybatis缓存测试示例

  • 2016-02-02 18:34
  • 13KB
  • 下载

MyBatis学习 之 三、SQL语句映射文件(2)增删改查、参数、缓存

2.2 select 一个select 元素非常简单。例如: Xml代码      select id="getStudent" parameterType="Stri...

mybatis3--延迟加载,缓存

  • 2017-02-25 16:32
  • 3.85MB
  • 下载

框架 day66 Mybatis(关联查询映射(1对1/多),延迟加载,一级/二级缓存,与spring整合,逆向工程)

框架 day66 Mybatis(关联查询映射(1对1/多),延迟加载,一级/二级缓存,与spring整合,逆向工程)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)