MyBatis学习--缓存

原创 2018年04月17日 13:13:21

缓存的概念

  将数据存放在程序内存中,极大地提升了程序读写数据的速度

  MyBatis提供缓存,用于减轻数据查询的压力,提高性能

一级缓存

  SqlSession级别的缓存;每个session对应一个缓存;

  一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的;

  一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。

  

  注意事项:

    一级缓存是基于session的缓存,同一个session下的数据实现缓存共享;

    MyBatis默认开启一级缓存,用户不能控制(可以通过开发插件对它进行修改);

    当表中数据被修改(insert/update/delete)的时候,一级缓存会被清空;

    一级缓存还可以手动清空:session.clearCache();

 

二级缓存

  sessionFactory的缓存,不同的session之间也可以实现缓存共享

  MyBatis将sessionFactory级别的二级缓存细分到Mapper级别,即对于每一个Mapper.xml,如果在其中使用了<cache> 节点,则MyBatis会为这个Mapper创建一个Cache缓存对象,如下图所示:

  

  上述的每一个Cache对象,都会有一个自己所属的namespace命名空间,并且会将Mapper的 namespace作为它们的ID;

 

   也可以让多个Mapper共用一个Cache;

    方法一:这些Mapper的namespace相同;

    方法二:使用<cache-ref>节点配置;如:使用<cache-ref namespace=””>节点来指定这个Mapper使用了哪一个Mapper的Cache;

  

  二级缓存的使用:

    1、启用二级缓存,在核心配置文件中配置setting项来启用二级缓存;

     

    2、配置哪些操作需要使用二级缓存,开启mapper的二级缓存;

    

  二级缓存的禁用:

    在查询语句中使用useCache配置项,来设置是否使用二级缓存

   

    注:一级缓存是没有被禁用的;

  二级缓存的刷新:

    要设定是否刷新二级缓存,可以使用flushCache配置项;

  

  注意事项:

    使用二级缓存的映射类要实现序列化(Serializable):二级缓存的存储介质不一定在内存中,实现序列化之后,存储的对象可以存放在远程服务器;

     

    要将数据刷入二级缓存的时候,需要调用session.close();

    数据被修改(insert/update/delete)后,二级缓存也会被清空

 

PS:因作者能力有限,如有误还请谅解;

Mybatis学习(十三)mybatis查询缓存理解

查询 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域...
  • sun_aichao
  • sun_aichao
  • 2015-06-11 11:46:50
  • 6467

MyBatis主配置文件

  • 2014年11月29日 21:00
  • 175KB
  • 下载

MyBatis中如何禁用缓存

默认情况下,select语句总是使用缓存,但有些情况下,我们希望它总是刷新从而得到最新数据,看了下它的文档,配置不起作用,对配置文件的              不起作用,对sql映射文件的flush...
  • theoffspring
  • theoffspring
  • 2011-01-01 23:49:00
  • 9560

用例子介绍mybatis的缓存机制

在实际的项目开发中,通常对数据库的查询性能要求很高,而mybatis提供了查询缓存来缓存数据,从而达到提高查询性能的要求。 mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSessio...
  • zouxucong
  • zouxucong
  • 2017-04-01 18:51:22
  • 4414

Mybatis缓存机制深入解析

缓存概述  正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持;一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Sess...
  • samjustin1
  • samjustin1
  • 2016-08-16 15:08:27
  • 4178

hibernate和mybatis缓存的对比

Mybatis缓存 分为1级缓存和2级缓存,2级缓存在sessionfactory中,1级缓存在session中。 session中的缓存在session连接关闭并被连接池回收时清...
  • Tidhy
  • Tidhy
  • 2017-06-02 16:01:49
  • 2060

mybatis中的缓存问题

关于mybatis基础我们前面几篇博客已经介绍了很多了,今天我们来说一个简单的问题,那就是mybatis中的缓存问题。mybatis本身对缓存提供了支持,但是如果我们没有进行任何配置,那么默认情况下系...
  • u012702547
  • u012702547
  • 2017-02-15 13:58:05
  • 2238

深入理解MyBatis——缓存

MyBatis中使用缓存来提高其性能。 MyBatis中的缓存分为两种:一级缓存和二级缓存。使用过MyBatis的可能听到过这样一句话“一级缓存是sqlSession级别的,二级缓存是mapper级...
  • qq_37169817
  • qq_37169817
  • 2018-01-05 21:53:47
  • 563

mybatis注解及缓存调优

注 解: 好 处:1、减少维护数量,配置文件减少; 2、减少编码量,提升效率 做 法: 注释去实现普通的代码实现,当出现动态SQL的时候采用调用xml的方法; 保存对象 @In...
  • Munger6
  • Munger6
  • 2017-01-17 21:56:40
  • 1238

Mybatis的缓存

1、关于缓存的介绍 Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询到的数据写到缓存...
  • zbw18297786698
  • zbw18297786698
  • 2016-12-19 19:17:38
  • 853
收藏助手
不良信息举报
您举报文章:MyBatis学习--缓存
举报原因:
原因补充:

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