一:mybatis 介绍cache和使用cache
mybatis自带的缓存构架,方便配置、功能强大、定制方便。默认情况下cache是没有被开启的。想要开启此功能需要在sql映射文件中添加这样一行:
<cache />
添加这一行后,会产生如下效果:
- 映射语句文件中的所有select 语句将会被缓存。
- 映射语句文件中的所有insert,update 和delete 语句会刷新缓存。
- 缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。
- 根据时间表(比如no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序来刷新。
- 缓存会存储列表集合或对象(无论查询方法返回什么)的1024 个引用。
- 缓存会被视为是read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
以上所有的属性都可以通过<cache />
元素来修改:
<cache
eviction="FIFO"//回收策略
flushInterval="60000"//刷新间隔
size="512"//引用数目
readOnly="true"//只读
/>
以上表明首先创建了一个先进先出策略的缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。
可用的收回策略有:
- LRU – 最近最少使用的:移除最长时间不被使用的对象。
- FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
- SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
- WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
默认的是LRU。
属性flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
属性size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。
属性readOnly(只读)属性可以被设置为true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是false。
在<select />
标签中关于缓存的使用
属性
flushCache:将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。
useCache:将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true。如果设置为false,那么即使启用了<cache />
该条select的结构也不会被二级缓存。
二:下面结合springMVC+mybatis+mysql实际检验
mybatis缓存机制.png
装饰者模式
装饰者模式装饰者模式在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装类的对象,也就是装饰来包裹真实的对象。
- 执行main()方法
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
网友评论