zoukankan      html  css  js  c++  java
  • Mybatis学习笔记三

    一、延迟加载

      延迟加载即加载延迟了,并不是一次性加载完而是按需加载,感觉应该是针对多表查询而言的,即先查询单表等需要另一张表的信息时再去加载,这样能提高数据库的性能;

      需要注意的是,mybatis提供的输出映射(即返回结果隐射)的两种属性resultType和resultMap,其中只有resultMap支持延迟加载;而resultType是通过ssociation或collection标签来实现的,具体实现的关键代码如下:

    <resultMap id="testLazyLoading" type="最终映射的javabean">
        <!-- 配置id和result标签 -->
        ......
      <!-- 配置association实现延迟加载 -->
    <association property="" javatype="" select="指定需要延迟加载的sql对应的statement的id" column="select标签中sql查询的参数"> </association> </resultMap>

      最后,mybatis是不支持延迟加载的,需要在其配置文件sqlMapConfig中进行全局的配置,关键代码如下:

    <!-- SqlMapConfig.xml中的全局配置 -->
    <settings>
        <!-- 开启延迟加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
    
        <!-- 按需加载 -->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

    二、缓存

      1、一级缓存

      一级缓存即SqlSession缓存,mybatis是默认开启的,所以一般不需要我们刻意去维护

      2、二级缓存

      二级缓存是Mapper级别的缓存,是可以跨SqlSession的;二级缓存的使用是需要我们自己在配置文件中手动开启,具体如下:

      先在SqlMapConfig中进行配置,代码如下:

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

      然后在需要使用二级缓存的mapper的配置文件中开启二级缓存,代码如下

    <!-- 开启当前mapper下的二级缓存 -->
        <cache/>
    <!-- 注意,cache标签可以继续配置用于实现二级缓存的整合,即不用mybatis提供的二级缓存用第三方的 -->

      最后,二级缓存中调用的javabean需要实现序列化(Serializable)接口,这是为了将缓存数据取出执行反序列化操作,因为二级缓存数据的存储地不一定全部在内存

      注意:缓存开启的过程中,如果一旦进行了事务的commit操作,即对数据库进行了增删改,那么为了避免脏数据的出现,默认情况下是会刷新缓存区域的(即清空缓存)

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/darling2047/p/6060808.html
Copyright © 2011-2022 走看看