MyBatis之缓存

现在MyBatis因其灵活性使用率很高,而且MyBatis也提供缓存功能,所以也可了解一下。MyBatis提供一级缓存和二级缓存,一级缓存(同一个sqlSession共享数据)是默认开启的而且不能关闭,二级缓存(不同的sqlSession之间共享数据)是需要配置开启的。

MyBatis之一级缓存

一级缓存是默认开启的,只要是同一个sqlSession,第二次查询就会从缓存中读取数据。不过如果跟Spring集成后,一级缓存就会失效。原因就是MyBatis的一级缓存是需要同一个sqlSession,但是Spring会在sqlSession使用完毕后就会关闭,这样缓存数据将会清空。当第二个请求,重新新建sqlSession,然后又去请求数据库。目前我们一般是跟Spring整合使用,但是因为这个原因只能寻求其二级缓存。

MyBatis之二级缓存

配置

一级缓存无法实现,但是MyBatis提供二级缓存,而且配置比较简单,首先需要返回的POJO类必须可序列化,即要求实现Serializable接口,然后在XML文件中配置

配置缓存可以使用不同的参数:


  • eviction 代表缓存回收策略,目前MyBatis提供以下回收策略。(1)LRU,最近最少使用的,移除最长时间不用的对象。(2)FIFO,先进先出,按对象进入缓存的顺序来移除他们。(3)SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象。(4)WEAK,弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象。
  • flushInterval 刷新间隔时间,单位为毫秒,如果不配置,那么当SQL被执行的时候才会去刷新缓存。
  • size 引用数目,代表缓存最多可以存储多少对象,不宜设置过大,不然会导致内存溢出。
  • readOnly 只读,意味着缓存数据只能读取而不能修改。

全局/局部配置

全局配置:默认就是true,一般不用配置,配置就是取消二级缓存,意义不大。


	
	

局部配置:使用useCacheflushCache,前者表示是否需要使用缓存,而后者表示插入后是否需要刷新缓存。