mybatis缓存机制

一级缓存(本地缓存,开启)

二级缓存手动开启和配置,基于namespace级别的缓存

一级缓存(本地缓存):sqlsession级别的缓存,一级缓存是一直开启的(与数据库同一个会话期间查询到的数会放在本地缓存中)

相同数据只需从本地缓存中拿,不需要查询数据库

一缓:1、sqlSession不同

            2、sqlSession相同,查询条件不同

            3、sqlsession相同,两次查询之间执行了增删改操作

            4、sqlSession相同,手动清除了一级(缓存清空)

二级缓存(全局缓存):基于namespase级别的缓存,一个namespace对应一个二级缓存

              工作机制:1、查询一条数据,这个数就会被放在当前会话的一级缓存

                                   2、如果会话关闭,一级缓存会被保存到三级缓存,新的会话查询信息

                                   3、sqlSession==EmployeeMapper====>Employee

1、<setting   name="cacheEnabled"    value="true"  />

 2、在mapper.xml中配置使用二级缓存

        <cache    eviction="FIFO"     flushInterval="6000"   readOnly">

 3、pojo实现序列化接口

eviction  :缓存的回收策略    LRU:最近最少使用

                                                    FIFO:先进先出

                                                    SOFT:软引用

                                                    WEAK:弱引用

readonly:是否只读

                  true:只读,mybatis认为所有从数据的操作都是只读操作,不修改数据

                  false:非只读,mybatis获取的数据可能会被修改

size:缓存存放多少元素

type:指自定义缓存的全类名

fluashInternal:缓存刷新间隔(缓存多长时间清空一次)

效果:数据会从二级缓存中获取

            查出的数据都会被默认放在一级缓存中

           只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存

缓存属性:1、cacheEnable:false  关闭缓存(二级缓存)一级缓存不可用

                     2、每个select标签都有useCache=”true“           false    一级缓存依然使用,二级缓存不可用

                     3、每个增删改标签flushcache="true"     增删改标签执行完成后清除缓存(一级缓存、二级缓存都清除)

                     4、查询标签flushcache="false"如果flushcache=true(每次查询都清除缓存)

                     5、sqlsession.clearcache():只清除session的一级缓存

                     6、localcachescope:本地缓存作用域:当前会话所有数据保存在当前缓存中

posted @ 2019-07-10 15:12  繁春  阅读(321)  评论(0编辑  收藏  举报