zoukankan      html  css  js  c++  java
  • MyBatis学习(十三)--缓存

    缓存的概念

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

      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:因作者能力有限,如有误还请谅解;

  • 相关阅读:
    Android相关sdk使用
    Uniscribe文字自动换行
    Chrome RenderText分析(2)
    c++智能指针
    codepage IMLangCodePages
    GUI 快捷键的实现思路
    买车险
    九年---祝爱永存!
    算法
    Windows内核安全与驱动开发
  • 原文地址:https://www.cnblogs.com/WHL5/p/8863390.html
Copyright © 2011-2022 走看看