缓存

作者: 趁年轻多奋斗 | 来源:发表于2019-04-19 14:12 被阅读0次

    Mybatis分为一二级缓存

    一级缓存在SqlSession上    (默认情况下开启,这一级的缓存不需要POJO对象可序列化)

    二级缓存在SqlSessionFactory上        


    一级缓存:
       ( 需要提交才能 ) 当代码对同一个对象进行两次获取时,实际只执行一条SQL语句。代码使用的是同一个SqlSession对象。(在缓存没有超时或是声明需要刷新时,就会在缓存获取数据)

    二级缓存:

        能在不同的SqlSession对象之间共享相同的缓存。在映射文件(XXXMapper.xml)加入代码:<cache/>()(Mybatis会将对应的命名夸奖呃逆所有的select元素SQL查询结果进行缓存。而其中的insert、delete和update语句在操作时会刷新缓存)

        这样MyBatis会序列化和反序列化对应的POJO,也就要求POJO是一个可序列化对象。(如何没有,则会抛出异常,导致运行错误)

    自定义cache:

    1.cache元素的配置项

        eviction 缓存策略分为:

            LRU 最近最少使用:移除最长时间不被使用的对象    (默认)

            FIFO 先进先出:按对象进入缓存的顺序来移除它们

            SOFT 软引用:移除基于垃圾回收器状态和软引用规则对象

            WEAK 弱引用:更积极移除基于垃圾回收器状态和弱引用规则对象

         type:自定义缓存类(需要实现接口org.apache.ibatis.cache.Cahe)

    2.现实中在这便可使用Redis\MongoDB进行常用缓存。

         <cache type="xx.RedisCache">

            <property name="host"  value="localhost"/>

        </cache> 

        可调用setHost(String host) 来设置配置内容

        当不需要任何缓存时

        <select ... flushCAHE="false" userCache="true"/>

        flush代表是否刷新新缓存,而UserCache属性则只对select特有,代表是否需要使用缓存.

        当其他的映射器需要数可使用同样的配置。引用缓存

        <cache-ref namespace="xxxx.xxxxMapper"/>

    相关文章

      网友评论

        本文标题:缓存

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