• mybatis_SQL缓存(5)


    1. <settings>  
    2.     <!-- 这个配置使全局的映射器启用或禁用缓存 -->  
    3.     <setting name="cacheEnabled" value="true"/>  
    4.     <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->  
    5.     <setting name="lazyLoadingEnabled" value="true"/>  
    6.     <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->  
    7.     <setting name="aggressiveLazyLoading" value="true"/>  
    8.     <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->  
    9.     <setting name="multipleResultSetsEnabled" value="true"/>  
    10.     <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->  
    11.     <setting name="useColumnLabel" value="true"/>  
    12.     <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->  
    13.     <setting name="useGeneratedKeys" value="true"/>  
    14.     <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->  
    15.     <setting name="autoMappingBehavior" value="PARTIAL"/>  
    16.     <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->  
    17.     <setting name="defaultExecutorType" value="SIMPLE"/>  
    18.     <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->  
    19.     <setting name="defaultStatementTimeout" value="25000"/>  
    20. </settings>  


    然后是SQL映射文件的配置

    [html] view plain copy
     
    1. <cache     
    2.     eviction="FIFO"     
    3.     flushInterval="60000"     
    4.     size="1024"     
    5.     readOnly="true"/><pre style="DISPLAY: none" class="html" name="code"><select id="select" parameterType="string" resultType="integer" useCache=“false”>    
    6. select 1  
    7. </select></pre>  
    8. <pre></pre>  
    9.    
     
    1. 所有在映射文件里的select 语句都将被缓存。
    2. 所有在映射文件里insert,update 和delete 语句会清空缓存。
    3. 缓存使用“最近很少使用”算法来回收
    4. 缓存不会被设定的时间所清空。
    5. 每个缓存可以存储1024 个列表或对象的引用(不管查询出来的结果是什么)。
    6. 缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用

    可用的收回策略(eviction)有: 

    LRU –  最近最少使用的:移除最长时间不被使用的对象。 

    FIFO –  先进先出:按对象进入缓存的顺序来移除它们。 

    SOFT –  软引用:移除基于垃圾回收器状态和软引用规则的对象。 

    WEAK –  弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。 

    默认的是 LRU。

    flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。 

    size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值1024。 

    readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。

    一、MyBatis的Cache配置
    1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。
    <settings>
    <setting name="cacheEnabled" value="true"/>
    </settings>

    2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
     <cache />


    3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:
    <select id="inetAton" parameterType="string" resultType="integer" useCache=“false”>  
    select inet_aton(#{name})
    </select>


     

    4、刷新缓存的属性:flushCache="true"

    在进行查找时就会直接从数据库查询而不是从缓存中查询,所以这样得来的数据才是最新的。


    二、注意的几个细节
    1、如果readOnly为false,此时要结果集对象是可序列化的。
    <cache readOnly="false"/>

    2、在SqlSession未关闭之前,如果对于同样条件进行重复查询,此时采用的是local session cache,而不是上面说的这些cache。

    3、MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来。

  • 相关阅读:
    jquery 全选反选 .prop('checked',!$(this).is(':checked'));
    C#字典 Dictionary<Tkey,Tvalue> 之线程安全问题 ConcurrentDictionary<Tkey,Tvalue> 多线程字典
    javascript 获取iframe里页面中元素值的方法 关于contentWindow和contentDocumen
    WPF 之 UI 异步交互
    layui 解决从子页面传值回父页面方法
    layui 解决文本框只输入数字方法
    layui 合计出现多位小数的解决方法
    Jquery.Cookie 使用
    Git 上传代码步骤
    2分钟教你如何彻底删除Win10中 Windows.old 文件夹
  • 原文地址:https://www.cnblogs.com/haimishasha/p/5710602.html
Copyright © 2020-2023  润新知