Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。
1. 一级缓存只是相对于同一个SqlSession而言。
也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一查询后,MyBatis会将查询结果放入缓存,在中间不涉及相应Mapper的数据更新(Insert,Update和Delete)操作的情况下,后续的查询将会从缓存中获取,而不会查询数据库。
一级缓存也称为本地缓存:sqlsession
-
与数据库同一次会话期间查询到的数据会放在本地缓存中
-
以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。
2. 二级缓存是针对于应用级别的缓存,也就是针对不同的SqlSession做到的缓存。
-
二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存,二级缓存需要手动开启和配置,他是基于namespace级别的缓存。开启:
<setting name="cacheEnabled" value="true"/>
-
当开启二级缓存时,MyBatis会将首次查询结果存入对于Mapper的全局缓存,如果中间不执行该Mapper的数据更新操作,那么后续的相同查询都将会从缓存中获取。
-
一个会话查询一条数据,这条数据就会被放到当前会话的一级缓存中。
-
如果当前会话关闭了,那么这个会话的一级缓存会放入二级缓存中。
-
新会话查询信息,就会从二级缓存中获取数据。