zoukankan      html  css  js  c++  java
  • MyBatis源码研究-缓存

    在学习Hibernate中,经常有看到一级缓存和二级缓存的概念,并且有了解到,一级缓存是session级别的缓存一般缓存在内存中,二级缓存是指sessionfactory级别的缓存,一般缓存在内存或者物理介质中。

    但是在MyBatis中,这两天看源码的时候,好像MyBatis中的缓存的定义和Hibernate中的有所不同。
        一级缓存是在BaseExecutor中的通过localCache进行处理,这个缓存是默认开启的。是属于事物一个Conn内的缓存。
        二级缓存是在CachingExecutor进行处理,并通过TransactionalCacheManager进行管理,这个缓存是需要通过配置的方式设定开启,缓存范围是SqlSession级别的。默认是PerpetualCache进行二级缓存的处理,但是也可以通过配置的方式,手动执行缓存的执行类,该执行类需要继承接口org.apache.ibatis.cache.Cache。
        在二级缓存的管理中,可以分成两个阶段,一个是query的时候,缓存的临时存放,存放在TransactionalCache,一个阶段是commit的时候,缓存会存放到CacheingExecutor对象中的TransactionCache数据结构中。
    在Query的时候,程序执行如下:
    MyBatis源码研究-缓存

    而在commit的时候,MyBatis会将缓存数据通过装饰器模式,进行事物的异步控制、日志管理、序列化、内存管理等。执行过程如下:
    MyBatis源码研究-缓存
  • 相关阅读:
    13---Net基础加强
    12---Net基础加强
    11---Net基础加强
    10---Net基础加强
    09---Net基础加强
    08---Net基础加强
    07---Net基础加强
    06---Net基础加强
    05---Net基础加强
    04---Net基础加强
  • 原文地址:https://www.cnblogs.com/daichangya/p/12958549.html
Copyright © 2011-2022 走看看