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操作,即对数据库进行了增删改,那么为了避免脏数据的出现,默认情况下是会刷新缓存区域的(即清空缓存)

  • 相关阅读:
    2019 年百度之星—初赛一 B题 Game
    蒲公英
    集训队8月17日
    CodeForces 550E Brackets in Implications 推理
    11076: 小P的集合 位运算
    树状数组区间修改版本模板
    Contest1692
    POJ
    树状数组进阶-区间修改+区间查询
    具体数学-第二章-和式
  • 原文地址:https://www.cnblogs.com/darling2047/p/6060808.html
Copyright © 2011-2022 走看看