MyBatis自带的缓存配置(Cache)

如果要实现 mybatis 的二级缓存,一般来说有如下两种方式:
1. 采用 mybatis 内置的 cache 机制。
2. 采用三方 cache 框架, 比如ehcache, oscache 等等.


采用 mybatis 内置的 cache 机制。
在 sql 语句映射文件中加入 语句 , 并且相应的 model 类要实现 java Serializable 接口,因为缓存说白了就是序列化与反序列化的过程,所以需要实现这个接口. 单纯的 表示如下意思:
1.所有在映射文件里的 select 语句都将被缓存。
2.所有在映射文件里 insert,update 和 delete 语句会清空缓存。
3.缓存使用“最近很少使用”算法来回收
4.缓存不会被设定的时间所清空。
5.每个缓存可以存储 1024 个列表或对象的引用(不管查询出来的结果是什么) 。
6.缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用者或线程潜在修改。
缓存元素的所有特性都可以通过属性来修改

一、MyBatis的Cache配置

1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。




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


3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:


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


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

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

说意义不大是在于:
a、面对一定规模的数据量,内置的cache方式就派不上用场了;
b、对查询结果集做缓存并不是MyBatis框架擅长的,它专心做的应该是sql mapper。采用此框架的Application去构建缓存更合理,比如采用OSCache、Memcached啥的。


采用 ehcache 来实现 mybatis 的二级缓存参考上一个文档;


转载:http://blog.sina.com.cn/s/blog_5673f78b0100v47z.html

你可能感兴趣的:(mybatis)