一级缓存
MyBatis对缓存提供支持,但是在没有配置的默认的情况下,它只开启一级缓存(一级缓存只是相对同一个SqlSession而言)。在使用同一个SqlSession和同一条SQL在缓存数据没有超时和刷新的情况下,第二次执行同一条SQL时直接可以到缓存中拿数据。也就是说一级缓存只在SqlSession级别,但是各各SqlSession是隔离的所以,其它新的SqlSession无法共享这个缓存。
二级缓存
二级缓存可以克服一级缓存无法共享缓存的问题。
二级缓存存在于SqlSessionFactory上,而SqlSession在SqlSessionFactory下所以一级缓存(SqlSession)可以共享二级缓存(SqlSessionFactory)的缓存数据。而SqlSessionFactory层面上的二级缓存是不开启的,实现二级缓存MaBatis需要POJO必须实现Serializable接口。
开启二级缓存、一级缓存默认开启的