mybatis 二级cache

2016-08-22  本文已影响494人  阿波罗程序猿

一:mybatis 介绍cache和使用cache


mybatis自带的缓存构架,方便配置、功能强大、定制方便。默认情况下cache是没有被开启的。想要开启此功能需要在sql映射文件中添加这样一行:
<cache />

添加这一行后,会产生如下效果:

以上所有的属性都可以通过<cache /> 元素来修改:

  <cache
    eviction="FIFO"//回收策略
    flushInterval="60000"//刷新间隔
    size="512"//引用数目
    readOnly="true"//只读
  />

以上表明首先创建了一个先进先出策略的缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。

可用的收回策略有:

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

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

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

<select />标签中关于缓存的使用
属性

flushCache:将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。
useCache:将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true。如果设置为false,那么即使启用了<cache />该条select的结构也不会被二级缓存。

二:下面结合springMVC+mybatis+mysql实际检验


mybatis缓存机制.png

装饰者模式

装饰者模式在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装类的对象,也就是装饰来包裹真实的对象。

装饰者模式
public class Go {

    public static void main(String[] args) {

        System.out.println("套餐菜单\n");

        EggsNoodles eggsNoodles = new EggsNoodles();
        eggsNoodles.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles = new BeefNoodles(eggsNoodles);
        decoratorNoodles.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles1 = new AubergineNoodles(eggsNoodles);
        decoratorNoodles1.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles2 = new AubergineNoodles(decoratorNoodles);
        decoratorNoodles2.noodNameAndPrice();
    }
}
运行结果

六:mybatis cache作用


mybatis cache 提供查询缓存,用于减轻数据库压力,提高数据库性能。快速响应用户请求,改善用户体验。适用于各种频繁查询数据且查询条件不是十分复杂的业务。

需要源码请留下邮箱

参考官方文档:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping

上一篇 下一篇

猜你喜欢

热点阅读