美文网首页
Mybatis 缓存机制

Mybatis 缓存机制

作者: 虾米咬小米 | 来源:发表于2020-07-22 14:46 被阅读0次

    MyBatis提供一级缓存和二级缓存机制。

    一级缓存是Sqlsession级别的缓存,Sqlsession类的实例对象中有一个hashmap用于缓存数据。不同的Sqlsession实例缓存的hashmap数据区域互不影响。Mybatis默认启用一级缓存,在同一个sqlsession中多次执行相同的sql语句,第一次执行后会将数据缓存起来,后面的查询将会从缓存中读取。当一个sqlsession结束后(close),该sqlsession中缓存的数据也将不存在。

    二级缓存是Mapper级别的缓存,多个sqlsession实例操作同一个Mapper配置可共享二级缓存。Mybatis默认没有启用二级缓存,需要手动配置开启二级缓存。

    一张图看看一集缓存和二级缓存的区别:

    image

    一级缓存

    一级缓存区域按sqlsession划分,当执行查询时会先从缓存区域查找,如果存在则直接返回数据,否则从数据库查询,并将结果集写入缓存区。 Mybatis一级缓存是在sqlsession内部维护一个hashmap用于存储,缓存key为hashcode+sqlid+sql,value则为查询的结果集。一级缓存在执行sqlsession.commit()后将会被清空。

    二级缓存

    二级缓存按照mapper划分,一个mapper有一个自己的二级缓存(按照namespace区分不同缓存区域,如果多个mapper的namespace相同,则公用一个缓存区域),当多个sqlsession类实例加载相同的Mapper文件,执行mapper配置文件中的sql查询时,这些sqlsession可共享一个二级缓存。Mybatis默认没有启用二级缓存,需要自行配置。

    参考:
    Mybatis学习系列(七)缓存机制
    XML 映射器- 官网
    MyBatis的flushCache和useCache的使用

    相关文章

      网友评论

          本文标题:Mybatis 缓存机制

          本文链接:https://www.haomeiwen.com/subject/meazkktx.html