NingG +

MyBatis中缓存机制

整体上,来一张图:

一级缓存

一级缓存是Session会话级别的,几点:

关于一级缓存的性能问题,详细查看:MyBatis的一级缓存实现详解 及使用注意事项

二级缓存

MyBatis并不是简单地对整个Application就只有一个Cache缓存对象,它将缓存划分的更细,即是Mapper级别的,即每一个Mapper都可以拥有一个Cache对象,具体如下:

MyBatis对二级缓存的支持粒度很细,它会指定某一条查询语句是否使用二级缓存。

在二级缓存的设计上,MyBatis大量地运用了装饰者模式,如CachingExecutor, 以及各种Cache接口的装饰器。

关于装饰者模式,参考:装饰者模式

一级缓存和二级缓存的使用顺序

请注意,如果你的MyBatis使用了二级缓存,并且你的Mapper和select语句也配置使用了二级缓存,那么在执行select查询的时候,MyBatis会先从二级缓存中取输入,其次才是一级缓存,即MyBatis查询数据的顺序是:

二级缓存 ———> 一级缓存 ——> 数据库

todo

Hibernate vs. MyBatis

参考来源

Top