分享

MyBatis级联探讨

 昵称11935121 2018-09-25
  • 数据模型

MyBatis级联探讨

  • 根据sex的值去决定使用MaleEmployee或者是FemaleEmployee的resultMap去映射,这便是鉴别器
  • column属性定义的参数就是这里的empId

我的理解(等待验证):

  • 如果不设置延迟加载,用户查询时会直接出现1+N 次查询,获取到所有结果
  • 延迟加载将采取默认规则,按树的层级加载
  • 设置懒加载,仅仅查询1次,在关联属性 get、is、equals 等方法调用时触发N次关联查询(aggressiveLazyLoading 默认是true)
  • aggressiveLazyLoading设置为true时,属性按需加载

验证理解:

  • lazyLoadingEnabled 也是一个开关,它来控制是否使用延迟加载的功能,但是延迟加载将采取默认规则,按树的层级加载,详细情况下篇我们在谈
  • aggressiveLazyLoading 如果设置它为false,则它不会按树的层级加载

MyBatis级联探讨

总结理解:

  • lazyLoadingEnabled 设置懒加载,为true 时,每次加载触发一层(默认)
  • aggressiveLazyLoading 每一个对象包含多个懒属性,一个懒属性触发条件所有懒属性加载
  • aggressiveLazyLoading 设置为false,配合fetchType 设置部分懒属性加载、部分懒属性不加载

树形层级加载:

  • MyBatis会把员工和鉴别器,健康情况当做树形的第一层级加载,所以运行了2个SQL
  • 负责项目信息和员工卡是同一个层级,所以MyBatis会连同该员工负责的项目也同时加载进来

MyBatis级联探讨

非全局定义延迟加载策略:

  • 在关联的元素(association ,collection ,discriminator)中,我们存在一个属性:fetchType来决定是否需要延迟加载,如果配置它,它将覆盖掉原有在MyBatis设置的策略
  • 它有两个取值:
  • lazy: 延迟加载
  • eager:即刻加载

最新官网解释:

MyBatis级联探讨

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多