mybatis的一级缓存与二级缓存

一级缓存  

        Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

简单说

         session级别的缓存

   当用户对同一个session进行多次查询的时候,只会查询一次数据库

   后面的查询直接返回缓存的数据

   当提交事务结束session会把一级缓存中的数据清除

二级缓存

          Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

   工作原理就是当开启了二级缓存mybatis会把一级缓存的数据序列化至磁盘中

   当开始一个新的session再次查询时会尝试从二级缓存中查询是否有数据,

   有就直接返回缓存中的数据。

 

开启二级缓存

   在MyBatis的配置文件启动

 在需要开启二级缓存的表映射文件中增加 cache标签

  

  使用二级缓存的实体类实现Serializable接口

 

posted @   changlinlo  阅读(340)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示