缓存


缓存 更多的了解 因为我们有更好的缓存 我们都知道,进行数据库的缓存一次操作,时间相对比较长   怎么提高查询效率 MyBatis提供了缓存,执行完sql查询后,把结果暂存到,一个对象 当我们再次执行同样的查询的时候,先从缓存中查找,,如果查询到了,则返回结果 如果没有查询到了,则在进行数据库的查询   MyBatis一共提供了两种缓存,分别是一级缓存和二级缓存       一:一级缓存SQLSession     第一次查询的时候,进行了sql的预编译,很明显进行了数据库的操作 第二次查询的时候,没有编译sql,直接输出结果 证明第二次查询的时候,没有查数据库,而是直接从一级缓存sqlSession中拿到结果   二级缓存SqlSessionFactor       二级缓存何时存入? 在关闭sqlSession·后,才会把sqlSession中缓存的数据添加到namespace的二级缓存中 开启了二级缓存后,还需要将pojo类实现Serializable接口,因为二级缓存可能用到内存 以及磁盘的空间,如果用到磁盘的空间,肯定要序列化,想要序列化,不必须实现呢Serializabke 接口   怎么用? 一级缓存默认存在,二级缓存需要手动开启     测试 一定注意,一定是同一个SQLSessionFactory 创建不同的sqlSession实例     上面的代码,理论上讲,第一次查询的时候,肯定要查数据库的,sqlSession关闭的时候,缓存放在sqlSession实例中 第二次查询的时候,理论上讲从sqlSessionFactory中查找 但是我们发现任然发现从数据库中查找               第二次查询的时候不再有预编译了 而且出现了命中率 两次命中一次 足以证明,第二次查询数据来自二级缓存sqlSessionFactory