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