zoukankan      html  css  js  c++  java
  • 延迟加载和缓存(终极)

    延迟:

      MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询的时候

      按照设置延迟加载规则推迟对关联对象的select检索

      延迟加载可以有效的减少数据库 的压力。

      MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的(两条select语句)

    注意:

      延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能是使用多表连接所进行的select查询

     

    三种延迟:

      直接加载即执行对象的select语句,完成对主加载马上执行对关联对象的select查询

      侵入式延迟加载:执行对主加载对象查询时,不会执行关联对象的查询,若访问主加载对象详情时立即执行关联对象的查询

      深度式延迟加载:执行对主加载对象查询时,不会执行关联对象的查询,若访问关联对象详情时立即执行关联对象的查询

    侵入式延迟加载案例:

      

      

       

       

       

       

       

     深度式延迟加载案例

      

      

       

       

       

     缓存:

      好处:

        使用缓存可以使应用更快地获取数据,避免和数据库的频繁地交互

        尤其是在查询越多、缓存命中率越高的情况下,使用缓存的作用也就越明显。

      

    MyBatis查询缓存机制:

      根据缓存区的作用域与生命周期,可划分两种

        一级缓存

        二级缓存

    MyBatis缓存的作用域

      根据映射文件的namespace去划分的,相同的namespace的mapper查询放在同一个缓存区域。不同的namespace下的数据互不干扰

    生命周期:

       但是SqlSession对象一旦关闭,SqlSession对象就不存在了,即一级缓存就不存在了

      二级缓存的生命周期与整个应用同步

    一级缓存测试:

      

      

       

     增删改对一级缓存的影响  

      

       

      

       

     总结:

         一级缓存在增删改的情况下,无论是否提交事务,都会重新发送SQL,并清除缓存

        一级缓存真实存在,无需配置

        一级缓存的依据是SQLid+SQL语句

    二级缓存测试:

      .xml文件

      

       entity

      

       

       

       

       

      增删改对一级缓存的影响

       

       

     总结:

      二级缓存需要手动开启

      二级缓存即使关闭了SqlSession也能使用

      如果一个select标签想要局部关闭二级缓存,需要设置useCache=false

      

      如果在执行增删改操作的过程中不刷新缓存,须设置flushCache=false

      

       

  • 相关阅读:
    常用正则表达式
    C语言的指针与二维数组
    【原创】datalist实现简单分页功能
    【原创】datalist的页脚访问和控制
    [原创]手动删除顽固病毒总结
    [zz]复杂指针解析
    极度郁闷的一次电脑维修经历
    武汉城市地铁规划图
    [转]objc_msgSend 的 ARM 汇编分析
    [转]Cydia and XCode Local App Testing
  • 原文地址:https://www.cnblogs.com/whtt/p/11672120.html
Copyright © 2011-2022 走看看