Mybatis 二级缓存的使用

时间:2020-07-13 23:16:15   收藏:0   阅读:58

Mybatis二级缓存

失效策略

  执行同个namespace下的mapper映射文件中增删改sql,并执行了commit操作,会清空该二级缓存

注意:实现二级缓存的时候,Mybatis建议返回的POJO是可序列化的,也就是建议实现Serializable接口

缓存淘汰策略:会使用默认的LRU算法来收回(最近最少使用的)

开启缓存

如何开启某个二级缓存mapper.xml里面配置

    <!--开启Mapper的namespace下的二级缓存-->
    <!--
        eviction:代表的是缓存回收策略,常见下面两种
        1)、LRU,最近最少使用的,移除最长时间不用的对象
        2)、FIFO,先进先出,按对象进入缓存的顺序来移除他们
        flushInterval:刷新间隔时间,单位为毫秒,这里配置的是10秒,如果不配置他,当SQL被执行的时候才会去刷新缓存
        size:引入数目,代表缓存最多可以存储多少个对象,设置过大会导致内存溢出
        readOnly:只读,缓存数据只能读取不能修改,默认值为false
    -->
    <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>

全局配置

    <!--全局配置-->
    <settings>
        <!--这个配置使全局的映射器(二级缓存)启用或禁用缓存,全局总开关,这里关闭,mapper中开启了也没用-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

一级缓存和二级缓存使用顺序

优先查询二级缓存==》查询一级缓存==》数据库

控制某个方法不走二级缓存

在标签中添加 useCache="false"

    <select id="queryUserOrder" resultMap="UserOrderResultMap" useCache="false">
    select
        u.id,
        u.name,
        u.pwd,
        u.phone,
        u.head_img,
        v.id idv,
        v.out_trade_no,
        v.create_time,
        v.state,
        v.total_fee,
        v.video_id,
        v.video_title,
        v.video_img
    from user u left join video_order v on u.id = v.user_id
    </select>

 

原文:https://www.cnblogs.com/chenyanbin/p/13296267.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!