乐趣区

关于java:MyBatisMyBatis缓存

Mybatis 缓存

  1. Mybatis 的一级缓存是指 SqlSession。存储作用域是 Session,会对同一个 SQL 语句进行 Session 缓存,来进步执行效率,一级缓存的作用域是一个 SqlSession。Mybatis 默认开启一级缓存。在同一个 SqlSession 中,执行雷同的查问 SQL,第一次会去查询数据库,并写到缓存中;第二次间接从缓存中取。当执行 SQL 时两次查问两头产生了增删改操作,则 SqlSession 的缓存清空。
  2. Mybatis 的二级缓存是指 mapper 映射文件。二级缓存的作用域是同一个 namespace 下的 mapper 映射文件内容,多个 SqlSession 共享。Mybatis 须要手动设置启动二级缓存。在同一个 namespace 下的 mapper 文件中,执行雷同的查问 SQL,第一次会去查询数据库,并写到缓存中;第二次间接从缓存中取。当执行 SQL 时两次查问两头产生了增删改操作,则二级缓存清空。
  3. 一级缓存区域是依据 SqlSession 为单位划分的。每次查问会先去缓存中找,如果找不到,再去数据库查问,而后把后果写到缓存中。Mybatis 的外部缓存应用一个 HashMap,key 为 hashcode+statementId+sql 语句。Value 为查问进去的后果集映射成的 java 对象。SqlSession 执行 insert、update、delete 等操作 commit 后会清空该 SQLSession 缓存。
  4. 二级缓存是 mapper 级别的。Mybatis 默认是没有开启二级缓存。

第一次调用 mapper 下的 SQL 去查问用户信息。查问到的信息会存到该 mapper 对应的二级缓存区域内。

第二次调用雷同 namespace 下的 mapper 映射文件中雷同的 SQL 去查问用户信息。会去对应的二级缓存内取后果。

如果调用雷同 namespace 下的 mapper 映射文件中的增删改 SQL,并执行了 commit 操作。此时会清空该 namespace 下的二级缓存。

退出移动版