说说Mybatis的一级、二级缓存?
说说Mybatis的一级、二级缓存?
- 一级缓存: 一级缓存是基于PerpetualCache的HashMap本地缓存,其作用范围是SqlSession。不同的SqlSession之间的缓存是相互隔离的,当SqlSession进行flush或close操作后,该SqlSession中的所有缓存将被清空。MyBatis默认开启一级缓存。
- 二级缓存: 二级缓存与一级缓存的机制相同,同样使用PerpetualCache和HashMap进行存储。不同之处在于,二级缓存的作用范围是Mapper(Namespace),可以在多个SqlSession之间共享缓存。同时,二级缓存也可以自定义存储源,例如使用Ehcache。默认情况下,二级缓存是关闭的,如果要开启二级缓存,需要在Mapper的映射文件中进行配置,并且相关的类需要实现Serializable序列化接口,以便在需要时将对象状态保存起来。