MyBatis+SpringMVC+SpringBootjava全家桶

缓存

2019-04-19  本文已影响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"/>

上一篇下一篇

猜你喜欢

热点阅读