1.对于一二级缓存的认识:
在进行两次相同且连续的查询时,日志有时会只有一次的查询记录,这就是一级查询的效果,一二级查询的使用可以加快运行时间。
2.一级缓存:
①一级缓存是SqlSessuon级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问,一级缓存是一直默认开启的,不需要手动开启啥的,并且也没有手动关闭的说法。
②使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存
2) 同一个SqlSession但是查询条件不同
3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
4) 同一个SqlSession两次查询期间手动清空了缓存。
即:sqlSession.clearCache();
3.二级缓存:
①二级缓存是
SqlSessionFactory
级别,通过同一个
SqlSessionFactory
创建的
SqlSession
查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取。
②二级缓存开启的条件:
1)在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置
2)在映射文件mapper中设置标签<cache />
3)二级缓存必须在SqlSession关闭或提交之后有效,即在
/**二级缓存只在SqlSession提交或失效时才能使用*/
sqlSession.commit();
sqlSession.close();
4)
查询的数据所转换的实体类类型必须实现序列化的接口
implements Serializable
③使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效。
4.Mybatis缓存查询记录
1.先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
2.如果二级缓存没有命中,再查询一级缓存
3.如果一级缓存也没有命中,则查询数据库
4.SqlSession关闭之后,一级缓存中的数据会写入二级缓存