Mybatis缓存

        缓存(cache)的作用是为了减去数据库的压力,提高查询性能。缓存实现的原理 是从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存)中, 当再次需要获取该对象时,直接从内存(缓存)中直接获取,不再向数据库执行 select 语句,从而减少了对数据库的查询次数,因此提高了数据库的性能。

一级缓存

        一级缓存的作用域是同一个 SqlSession, 在同一个 sqlSession 中两次执行相同的 sql 语句,第一次执行完毕会将数据库 中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询从而提高查询效率。当一个 sqlSession 结束后该 sqlSession 中的一级缓存也就不存在了。Mybatis默认开启一级缓存

Mybatis缓存_第1张图片

生命周期

1.MyBatis 在开启一个数据库会话时会创建一个新的 SqlSession 对象,SqlSession 对象中会有一个新的 Executor 对象。Executor 对象中持有一个新 的 PerpetualCache 对象,如果 SqlSession 调用了 close()方法,会释放掉一级 缓存 PerpetualCache 对象,一级缓存将不可用。

2.SqlSession 调用了 clearCache(),会清空 PerpetualCache 对象 中的数据

3.SqlSession 中执行了任何一个 update 操作(update()、delete()、 insert()) ,都会清空缓存的数据,但是该对象可以继续使用 

二级缓存

        二级缓存是 SqlSessionFactory 级别的,根据 mapper 的 namespace 划分区域 的,相同 namespace 的 mapper 查询的数据缓存在同一个区域,如果使用 mapper 代理方法每个 mapper 的 namespace 都不同,此时可以理解为二级缓 存区域是根据 mapper 划分

Mybatis缓存_第2张图片

配置二级缓存

1.启用二级缓存

 2.对象序列化

将所有的 POJO 类实现序列化接口 Java.io. Serializable。

3.配置映射文件

在 Mapper 映射文件中添加,表示此 mapper 开启二级缓存。 当 SqlSeesion 关闭时,会将数据存入到二级缓存

你可能感兴趣的:(缓存)