zoukankan      html  css  js  c++  java
  • Mybatis延迟加载, 一级缓存、二级缓存

    延迟加载

    概念:MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询。延迟加载可以有效的减少数据库压力。

    注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的。

    加载时机

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

    侵入式延迟:执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情时,就会马上执行关联对象的select查询。即对关联对象的查询执行,侵入到了主加载对象的详情访问中。也可以这样理解:将关联对象的详情侵入到了主加载对象的详情中,即将关联对象的详情作为主加载对象的详情的一部分出现了。

    深度加载:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的select查询。

    侵入式延迟加载配置方法:

    修改主配置文件的,将延迟加载开关lazyLoadingEnabled开启(置为true),将侵入式延迟加载开关aggressiveLazyLoading也开启(置为true,默认为true)。
            <setting name="lazyLoadingEnabled" value="true"/>
            <!--配置侵入式延迟加载   默认为false
                侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
                深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
            -->
            <setting name="aggressivelazyLoading" value="true"/>

    深度延迟加载:

    修改主配置文件的,将延迟加载开关lazyLoadingEnabled开启(置为true),将侵入式延迟加载开关aggressiveLazyLoading关闭(置为false)。
            <setting name="lazyLoadingEnabled" value="true"/>
            <!--配置侵入式延迟加载   默认为false
                侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
                深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
            -->
            <setting name="aggressivelazyLoading" value="false"/>

    注意:该延迟策略也是一种延迟加载,需要在延迟加载开关lazyLoadingEnabled开启时才会起作用。若lazyLoadingEnabled为false,则aggressiveLazyLoading无论取何值,均不起作用。

    一级缓存

    结论:

    Mybatis框架天然集成一级缓存
    一级缓存查询依据为SQLID+SQL语句
    增删改会清空一级缓存

     

     二级缓存

    配置二级缓存

     

    增删改对二级缓存的影响

    增删改同样会清空二级缓存

     结论:

    二 级缓存不比一级缓存,要在configuration.xml中手动开启。
    二级缓存是全局应用级别的缓存,即使关闭了session 仍能使用。
    如果一个select标签想要局部关闭二级缓存, 需要设置useCache=false
    二级缓存不能使用注解方法配置
    如果在执行增删改操作的过程中不刷新缓存, 须设置flushCache=false
    着重点

        

  • 相关阅读:
    事务四大特征:原子性,一致性,隔离性和持久性(ACID)
    解决“要登录到这台远程计算机,你必须被授予”
    SqlServer_查看SQLServer版本信息
    sed 查找文件的某一行内容
    linux echo命令的-n、-e两个参数
    在.Net中进行跨线程的控件操作(上篇:Control.Invoke)
    .NET性能优化方面的总结
    SQLSERVER2008 显示列信息,包含扩展属性
    C#4.0新特性:可选参数,命名参数,Dynamic
    浅谈.net中的params关键字
  • 原文地址:https://www.cnblogs.com/dabrk/p/11671982.html
Copyright © 2011-2022 走看看