缓存
缓存
更多的了解
因为我们有更好的缓存
我们都知道,进行数据库的缓存一次操作,时间相对比较长

怎么提高查询效率
MyBatis提供了缓存,执行完sql查询后,把结果暂存到,一个对象
当我们再次执行同样的查询的时候,先从缓存中查找,,如果查询到了,则返回结果
如果没有查询到了,则在进行数据库的查询
MyBatis一共提供了两种缓存,分别是一级缓存和二级缓存
一:一级缓存SQLSession

第一次查询的时候,进行了sql的预编译,很明显进行了数据库的操作
第二次查询的时候,没有编译sql,直接输出结果
证明第二次查询的时候,没有查数据库,而是直接从一级缓存sqlSession中拿到结果
二级缓存SqlSessionFactor

二级缓存何时存入?
在关闭sqlSession·后,才会把sqlSession中缓存的数据添加到namespace的二级缓存中
开启了二级缓存后,还需要将pojo类实现Serializable接口,因为二级缓存可能用到内存
以及磁盘的空间,如果用到磁盘的空间,肯定要序列化,想要序列化,不必须实现呢Serializabke
接口
怎么用?
一级缓存默认存在,二级缓存需要手动开启

测试
一定注意,一定是同一个SQLSessionFactory 创建不同的sqlSession实例

上面的代码,理论上讲,第一次查询的时候,肯定要查数据库的,sqlSession关闭的时候,缓存放在sqlSession实例中
第二次查询的时候,理论上讲从sqlSessionFactory中查找
但是我们发现任然发现从数据库中查找




第二次查询的时候不再有预编译了
而且出现了命中率
两次命中一次
足以证明,第二次查询数据来自二级缓存sqlSessionFactory