留意:缓存只针对于 DQL(查询)语句,也就是说缓存机制只对应 Select 语句。一旦你实行了,insert 或者delete或者 update 更新语句,无论是否是更新修改删除那个数据表中的记录,都会清空缓存,所以,这样就不会导致 缓存当中的 select 语句的数据是:旧的无用的数据了。
实行 Select 查询语句的时间,起首从对应的这个 Select 语句的 SqlSession 对象(一级缓存)当中查询是否有对应该Select 查询语句的缓存有的话,就不实行该 查询的 SQL 语句了,而是直接从一级缓存当中取出这个 Select 查询语句的数据结果。第一次实行 Select 语句(因为MyBatis 一级缓存默认是开启的)就会将存入到 sqlSession 对象(一级缓存)当中,方便后续的查询。3.1 一级缓存失效环境/条件
思考:什么时间不走缓存?一级缓存失效环境包括两种:
- sqlSession 对象不是同一个,肯定不走缓存。
- 查询条件不一样,肯定不走缓存。
第一步: 要在 MyBatis 的核心设置文件当中,设置 全局性地开启或关闭所有映射器设置文件中已设置的任何缓存。默认就是true,无需设置 。
- 要在 MyBatis 的核心设置文件当中,设置 全局性地开启或关闭所有映射器设置文件中已设置的任何缓存。默认就是true,无需设置 。
- 在需要使用二级缓存的 对应的 SqlMapper.xml 文件中添加设置:
- 使用二级缓存的实体类对象必须是可序列化的,也就是对应的POJO实体类,必须实现java.io.Serializable 接口
- 只有 当 SqlSession对象关闭或提交之后,一级缓存中的数据才会被写入到二级缓存当中。此时二级缓存才可用,否则没有提交/关闭,二级缓存是没有存储到数据信息的,是无效的。
7. 最后:
- MyBatis 缓存包括:
- 一级缓存:将查询到的数据存储到 SqlSession 中
- 二级缓存:将查询到的数据存储到 SqlSessionFactory 中
- 或者是集成别的第三方的缓存:比如 EhCache(Java语言开发的),Memcache(C语言开发的)等。
- 留意:缓存只针对于 DQL(查询)语句,也就是说缓存机制只对应 Select 语句。
- 一级缓存默认是开启的
- 一级缓存失效环境包括两种:
- 第一种:第一次查询和第二次查询之间,手动清空了一级缓存。实行:实行了 sqlSession.clearCache()方法,这是手动环境缓存。
- 第二种:实行了INSERT 或 DELETE 或UPDATE语句,不管你是操作恣意一张表,都会清空一级缓存。
- 一级缓存失效了,二级缓存也是失效了,二级缓存是通过将一级缓存的缓存存储到二级缓存当中的,所以一级失效,二级也是失效的
- 二级缓存:将查询到的数据存储到 SqlSessionFactory 中,范围比一级缓存中更大一些。
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和复兴是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |