MyBatis原理-延迟加载,一级缓存,二级缓存设置

一、延迟加载

  resultMap中的association和collection标签具有延迟加载的功能。

      延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。

 

<!-- 开启延迟加载 -->
 <settings>
        <!-- lazyLoadingEnabled:延迟加载启动,全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。默认是false -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- aggressiveLazyLoading:积极的懒加载,当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。false的话按需加载,默认是true -->
        <setting name="aggressiveLazyLoading" value="false"/>
         
        <!-- 开启二级缓存,默认是false -->
        <setting name="cacheEnabled" value="true"/>
</settings>

  

二、查询缓存

Mybatis的一级缓存是指SqlSession一级缓存的作用域是一个SqlSessionMybatis默认开启一级缓存

在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中,Mybatis的内部缓存使用一个HashMap,keyhashcode+statementId+sql语句,Value为查询出来的结果集映射成的java对象。;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。

 

Mybatis的二级缓存是指mapper映射文件二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享Mybatis需要手动设置启动二级缓存

在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。

springboot开启二级缓存

(1)在配置文件中添加:

mybatis.configuration.cache-enabled=true

(2)在mapper文件添加

<mapper namespace="com.yanwu.www.UserMapper">
<!-- 开启二级缓存 -->
<cache/>

 注意:因为缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。

 

禁用二级缓存

该statement中设置userCache=false可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true,即该statement使用二级缓存。

刷新二级缓存

 

posted @ 2018-09-03 15:45  Harvey2017  阅读(969)  评论(0编辑  收藏  举报