MyBatista缓存机制

目录

一级缓存

二级缓存

二级缓存开启:

1、开启二级缓存的全局配置

2、开启当前mapper的namespace下的二级缓存


缓存机制是为了减轻数据库的压力,在mybatis中提供了一级缓存和二级缓存,在开发中也解决了一部分的需求,在开发中还可以集成第三方的缓存,如Redis等。这里就只介绍mybatis的一级和二级缓存机制。

一级缓存

        mybatis的一级缓存是属于SqlSession级别的。如果是同一个SqlSession对象执行多次相同的sql语句,在第一次执行完成后,会将查询结果存入到一级缓存中,同一个SqlSession对象第二次执行相同的sql语句时会直接到一级缓存中获取数据,二不直接到数据库中获取数据。如果执行增删改操作sql语句,会清空一级缓存,之后执行相同的查询时会数据库中查询。

        mybatis的一级缓存是不用手动开启的。

例如:

        有一个学生数据表,在同一个SqlSession对象中要多次查询学生信息,除了第一次查询是到数据库中查询,其他次查询都是在一级缓存中获取结果集数据的,但是对学生信息进行增删改操作后,原来执行的查询操作存在一级缓存中的数据将被清空。

二级缓存

        mybatis的二级缓存是属于mapper级别的。二级缓存针对的不同的SqlSession对象的相同查询的,与一级缓存相比,二级缓存的作用范围更广。

        在第一个SqlSession对象在第一次执行sql语句时,会将执行结果存入mybatis二级缓存中,在第二个SqlSession对象执行和第一个SqlSession对象相同的sql语句时不会直接到数据库中获取数据,而是从二级缓存中获取数据。但是如果有增删改操作sql语句也是会清空mybatis的二级缓存,清空缓存和一级缓存一样。

        二级缓存是需要手动开启的。

二级缓存开启:

1、开启二级缓存的全局配置

需要在mybatis的核心配置文件中的<settings>元素中开启二级缓存全局配置。

<settings>
        <setting name="cacheEnabled" value="true"/>
</settings>

2、开启当前mapper的namespace下的二级缓存

开启当前mapper的namespace下的二级缓存,可以通过mybatis映射文件中的<cache>元素来完成,在mapper元素下添加:

<mapper namespace="mapper.StudentMapper">
    <cache></cache>
</mapper>

此时的二级缓存的配置都是默认的配置:

        -映射文件中的所有select语句将会被缓存。

        -映射文件中的所有insert、update、delete语句都会刷新缓存。

        -缓存会使用LRU算法(最近最少用算法)进行回收。

        -没有时间间隔,缓存不会以任何时间顺序来刷新。

        -缓存会存储列表集合或对象的1024个引用。

        -缓存是可读/可写的缓存,这意味着对象检索不共享,缓存可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

如果修改二级二级缓存的默认配置可以通过一下配置来修改: 

mybatis的缓存机制已经介绍完了,以后会继续更新基于Redis的三级缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值