热爱技术,追求卓越
不断求索,精益求精

spring使用mybatis缓存或spring事务对mybatis缓存的影响

mybatis缓存机制

为了提高数据库性能,减轻数据库压力,mybatis提供了缓存机制。mybatis的缓存分为两级:一级缓存、二级缓存。一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效。二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的。

mybatis一级缓存

mybatis的一级缓存是SqlSession级别的缓存,在操作数据库的时候需要先创建SqlSession会话对象,在对象中有一个HashMap用于存储缓存数据,此HashMap是当前会话对象私有的,别的SqlSession会话对象无法访问。mybatis的一级缓存默认是开启的。

mybatis二级缓存

二级缓存是mapper级别的缓存,也就是同一个namespace的mappe.xml,当多个SqlSession使用同一个Mapper操作数据库的时候,得到的数据会缓存在同一个二级缓存区域。二级缓存默认是没有开启的。

mybatis缓存问题

一级缓存,即session缓存,作用域为Session,当Session flush或close之后,该Session中的所有 Cache 就将清空,

二级缓存,即全局缓存,其作用域为Mapper(Namespace),默认关闭。

spring使用mybatis缓存问题

mybatis集成spring(使用mybatis-spring)时:每次查询spring会重新创建SqlSession,所以一级缓存是不生效的。而当开启事务时,spring会使用同一个SqlSession做查询,所以这个情况下一级缓存是生效的。

缓存问题文章推荐

《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

赞(1)
未经允许不得转载:LoveCTO » spring使用mybatis缓存或spring事务对mybatis缓存的影响

热爱技术 追求卓越 精益求精