• 延迟加载


    延迟加载,可能对于大家来说是一个很陌生的东西,今天我们就来整理一下关于延迟加载的知识点。

    那延迟加载到底什么是个什么东西,怎么用呢:

    延迟加载 (懒加载) ,就是说在关联查询的时候,利用延迟加载,先加载主信息,需要关联信息时再去按需加载关联信息。

    这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

    在mybatis中,resultMap标签 的association标签和collection标签具有延迟加载的功能。

    我们在这里先来做一个小测试:

    首先要先创建一个包装类,在包装类中我们继承事先建好的order类,让包装类中有order类的属性,

    然后再在包装类中写入事先创建好的user属性。

    我们测试一下没有配置延迟加载的时候mybatis操作sql语句的次数。

    这个是UserMapper.xml文件中的,我们写了一个sql语句是根据ID查询。

    这个是OrderMapper.xml配置文件中的。我们就正常的查询order表的数据,但是返回类型大家看好是包装类的。

    resultMap中写了order的字段和对应的UserMapper.xml的sql语句。

    user_id是order表中的字段,与user表中的id关联

    红线框住的地方是懒加载最核心的地方。(当然这就是懒加载的写法,但是懒加载需要配置,我们写到这就是为了让大家看到没有懒加载的效果,和加上懒加载的效果)

    这个是我的测试类,我们来打印一下查询执行了几条sql语句。(这里我们没有要使用user的字段)

     

    数据库还是把user的sql语句执行了。 

    然后我们在配置文件中加上懒加载的配置。 

     然后我们再看一下效果,

     

     加上了懒加载就只执行了一条sql语句

     原因是,我们没有加上打印,代码中没有输出list中的相关信息,所以就没有继续执行user中sql语句

     也就是你只是需要得到OrdersPojo(包装类)本身对象及其属性信息,并没有想得到user属性。

     

    设置积极的懒加载

    <!-- 设置积极的懒加载,默认是true -->

    <setting name="aggressiveLazyLoading" value="false"/>

    如果不设置,当你打印如下 也就是只是获取ordersPojo对象的属性时,那么mybatis也会自动将 该对象的user属性查询出来。

    但如果你设置了积极的懒加载模式 ,如果没有使用user对象,则也不会执行sql查询user表

    可能大家看起来会有点困难,又不理解的地方明白了可以私信我。

    搞明白这个,可是会很省数据库的性能的。

  • 相关阅读:
    Delphi中SQL语句配置参数代码示例
    Delphi中treeview的使用部分
    Delphi listview使用部分总结代码
    如何用Delphi编写自己的可视化控件
    关于treeview节点图标的帖子
    Delphi调用存储过程
    DELPHI的开源控件集(转自http://xieyunc.blog.163.com/)
    雨巷(A Lane in the Rain)
    五一过去了,新的开始
    好好的学习,做个有本事的人:),好好的玩,做个快乐的人!
  • 原文地址:https://www.cnblogs.com/buwang/p/9969185.html
Copyright © 2020-2023  润新知