①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存底层还是个HashMap去实现。
开启二级缓存代码:
<!--开启二级缓存 -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
二、
1、一级缓存
a)SqlSession级别的
b)默认是开启的
2、二级缓存
a)二级缓存SQLSessionFactory(namesapce)
b)默认是关闭的
c)放在二级中的对象要实现对象序列化接口
d)二级缓存可以使用第三方的
3、MyBatis的一级缓存和二级缓存都是用PerpetualCache来实现的
4、MyBatis执行更新操作后(cud),缓存都会被刷新。
总结:
一级缓存是每个sqlsession私有的缓存区域,默认开启。
二级缓存是多个sqlsession共有的缓存区域,默认关闭,放在二级缓存中的对象必须实现序列化接口,且二级缓存可以使用第三方的。