缓存: cache
缓存的作用:通过减少 IO 的方式,来提高程序的执行效摔。
mybatis 的缓存:将 select 语句的查询结果放到缓存(内存)当中,下一次还是这条 select 语句的话,直接从缓存中取,不再查数据库。一方面是减少了 IO 。另一方面不再执行繁琐的查找算法。效率大大提升。
mybatis 缓存包括:
.一级缓存:将查询到的数据存储到 SqlSession 中。
.二级缓存:将查询到的数据存储到 SqlSessionFactory 中。
.或者集成其它第三方的缓存:比如 EhCache 【 Java 语言开发的、 Memcache 【 C 语言开发的】等。
(缓存只针对于 DQL 语句,也就是说缓存机制只对应 select 语句。)
1.一级缓存
一级缓存默认是开启的。不需要做任何配置。
原理:只要使用同一个 SqlSession 对象执行同一条 SQL 语句,就会走缓存。
什么时候不走缓存:SqlSession对象不是同一个,查询条件不一样,不走缓存。
什么时候一级缓存失效:第一次 DQL 和第二次 DQL 之间你做了以下两件事中的任意一件,都会让一级缓存清空:1.执行了 sqlSession 的 clearCache ()方法,这是手动清空缓存。2.执行了 INSERT 或 DELETE 或 UPDATE 语句。不管你是操作哪张表的,都会清空一级缓存。
2.二级缓存
二级缓存的范围是 SqlSessionFactory 。
使用二级缓存需要具备以下几个条件:
1.< setting name =" cacheEnabled " value =" true ">全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。(默认就是 true ,无需设置。)
2.在需要使用二级缓存的 SqlMapper . xml 文件中添加配置:< cache />
3.使用二级缓存的实体类对象必须是可序列化的,也就是必须实现 java . io . Serializable 接口
4. SqlSession 对象关闭或提交之后,一级缓存中的数据才会被写入到二级缓存当中。此时二级缓存才可用。