Mybatis 的一级缓存和二级缓存原理

665 阅读1分钟

一级缓存

  • 默认情况下是开启的,而且是不能关闭的
  • 指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取
  • 最多缓存1024条SQL
  • 缓存使用的数据结构是一个map
    • key: MapperId+offset+limit+sql+all parameters
    • value: 信息
  • 如果两次sql查询中间出现了commit操作(修改,添加,查询),本sql中的一级缓存区域全部清空,下次使用时时需要重新查询的

二级缓存

  • 需要配置
    • 在mybatis全局配置中启用二级缓存配置
    • 对应的Mapper.xml中配置cache节点
    • 在对应的select查询节点中添加useCache=true
  • 是跨SqlSession的缓存,是mapper级别的,同一个mapper中的SqlSession都可以共享
  • 缓存使用的数据结构是一个map
    • key: MapperId+offset+limit+sql+all parameters
    • value: 信息