zoukankan      html  css  js  c++  java
  • mybatis缓存

    mybatis提供查询缓存,用于减轻数据库压力,提高性能。

    一级缓存

    一级缓存是sqlSession级别的,不同sqlSession之间的缓存数据区域相互不影响。在构造session对象时使用HashMap数据结构的内存区域存储缓存数据。 
    一级缓存默认是开启的。 
    sqlSession执行commit后会清空一级缓存,避免脏读。

    二级缓存

    二级缓存是mapper级别的,不同sqlSession可以共享同一个mapper中sql的缓存数据。 
    二级缓存默认不是开启的,需要通过setting配置开始

        <setting name="cacheEnabled" value="true"/>
    

    禁用二级缓存

    通过上面的配置可以全局禁用二级缓存 
    在statement中设置 useCache=false 可以禁止当前sql语句的二级缓存,该配置默认是true。

    二级缓存的局限性

    二级缓存对细粒度的数据级别的缓存实现不好,因为是mapper级别的,同一个namespace下的数据缓存都会被刷新。

    flushCache和useCache的使用

    当为select语句时: 
    flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。 
    useCache默认为true,表示会将本条语句的结果进行二级缓存。 
    当为insert、update、delete语句时: 
    flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。 
    useCache属性在该情况下没有。

    一级缓存问题处理

    怎么禁用一级缓存的效果

    sql级别

    flushCache="true"

    全局FlushCache

    <setting name="localCacheScope" value="STATEMENT"/>

    mybaitis插件 

    具体参考:https://segmentfault.com/a/1190000009062804

  • 相关阅读:
    JavaScript
    monkeyrunner总结
    repo简介
    android4.4 settings 中控制卡1 卡2都振动
    卡1卡2设置不同的默认铃声
    获取布局 ActionBar
    android Settings 解析
    设置应用中出现NFC服务,去掉
    判断当前网络显示运营商
    设置中默认铃声 通知 闹钟等
  • 原文地址:https://www.cnblogs.com/f-anything/p/8707541.html
Copyright © 2011-2022 走看看