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

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

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

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

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

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




第二次查询的时候不再有预编译了
而且出现了命中率
两次命中一次
足以证明,第二次查询数据来自二级缓存sqlSessionFactory
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了