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一二级缓存

  • 2017年11月28日 16:02
  • 41KB
  • 下载

MyBatis中如何合理的使用EhCache缓存框架

缓存简介 缓存使用场景 在mapperxml中启用Ehcache 当为Select语句时 当为insertupdatedelete语句时 配置场景 使用举例关于详细配置方面已经在另一篇文章中说过:My...

mybatis+redis缓存配置

  • 2016年09月22日 14:52
  • 17KB
  • 下载

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

MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二、SQL语句映射文件(1)resultMap MyBatis学习 之 三、S...

MyBatis_sql-resultMap-缓存

  • 2017年05月07日 12:50
  • 9.13MB
  • 下载

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

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

mybatis二级缓存学习

  • 2016年12月05日 18:02
  • 39KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MyBatis缓存
举报原因:
原因补充:

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