zoukankan      html  css  js  c++  java
  • 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使用二级缓存。

    刷新二级缓存

  • 相关阅读:
    今日大跌!
    web servers
    ASP.NET2.0缓存机制
    赚钱的总是史玉柱?
    asp.net速查手册
    为伊消得人憔悴,我的2007成就难有,内心彷徨
    success
    失守4600点
    Linux下chkconfig命令详解
    FTP批处理下载木马
  • 原文地址:https://www.cnblogs.com/harvey2017/p/9578019.html
Copyright © 2011-2022 走看看