资讯专栏INFORMATION COLUMN

Mybatis N+1问题解析

qqlcbb / 2390人阅读

摘要:问题解析因为热爱,所以拼搏。如何解决问题本身给出解决方案,就是延迟加载。延迟加载延迟加载会解决上述的问题,也就是在个级联表的情况下,只加载需求的数据库表数据。在特定的关联中,使用属性覆盖该内容的功能。

Mybatis N+1问题解析

因为热爱,所以拼搏。 --RuiDer

前导必备

Mybatis

数据库

级联

N+1问题??
N+1问题来源于数据库中常见的级联技术,即N个数据库表形成关联关系,当再增加一个关联表时,也就是N+1个级联关系,由于某些时候,我们并不需要加载数据库的所有数据,而是某一个数据库表中数据,这时Mybatis会自动加载所有表的数据,多执行几条无关sql语句,会造成数据库资源的浪费以及系统性能的下降,这就是级联表的缺点。
如何解决N+1问题
Mybatis本身给出解决方案,就是延迟加载。
延迟加载
延迟加载会解决上述的N+1问题,也就是在N+1个级联表的情况下,只加载需求的数据库表数据。这是互联网发展的需求,性能提升的途径。
如何配置Mybatis完成延迟加载
全局配置:
    - lazyLoadingEnabled        true/false
    - aggressiveLazyLoading      true/false
    
    lazyLoadingEnabled:延迟加载的全局开关,当开启时,所有关联都会延迟加载。在特定的关联中,
使用fetchType属性覆盖该内容的功能。fetchType将在后面介绍。

    aggressiveLazyLoading:是层级延迟加载开关,什么意思呢?就是处于同一个层级的关联表会同
时延迟加载,或者同时被加载。
    
    配置:
        在Mybatis的全局配置中的setting标签中加入设置
        
            
            
        
全局配置的缺点

上面的配置属于全局配置,会出现一个问题,同一个层级的级联表也存在需求性的差异,同一级的某个数据库表的数据或许不是我们经常使用的,那么上述的配置也会影响系统的性能。

全局配置的优化 --- fetchType属性
Mybatis使用fetchType属性解决全局配置的缺点。fetchType出现在级联元素association,collection中,它存在两个值
    - eager:获得当前POJO后立即加载对应的数据。
    - lazy:获得当前POJO后延迟加载对应的数据。
    
配置:
        

我的github
我的博客
CSDN

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71404.html

相关文章

  • MyBatis 源码分析系列文章合集

    摘要:简介我从七月份开始阅读源码,并在随后的天内陆续更新了篇文章。考虑到超长文章对读者不太友好,以及拆分文章工作量也不小等问题。经过两周紧张的排版,一本小小的源码分析书诞生了。我在写系列文章中,买了一本书作为参考,这本书是技术内幕。 1.简介 我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章。起初,我只是打算通过博客的形式进行分享。但在写作的过程中,发现要分析的代码...

    Crazy_Coder 评论0 收藏0
  • Java面试 32个核心必考点完全解析

    摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...

    JiaXinYi 评论0 收藏0
  • 教你手写Mybatis框架

    摘要:前言嗨,小伙伴们,这篇博文将带大家手写,让大家对的核心原理以及工作流程有更加深刻的理解。模块顾名思义,就是框架配置类,用于解析配置文件加载相关环境。配置模块这里的对框架的配置使用了简单的,主要原因还是简单易懂然后节省时间。 前言 (。・∀・)ノ゙嗨,小伙伴们,这篇博文将带大家手写mybatis,让大家对mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...

    antyiwei 评论0 收藏0
  • Mybatis源码分析

    摘要:我认为学习框架源码分为两步抓住主线,掌握框架的原理和流程理解了处理思路之后,再去理解面向对象思想和设计模式的用法目前第一步尚有问题,需要多走几遍源码,加深下理解,一起加油 这篇文章我们来深入阅读下Mybatis的源码,希望以后可以对底层框架不那么畏惧,学习框架设计中好的思想; 架构原理 架构图 showImg(https://segmentfault.com/img/remote/...

    lindroid 评论0 收藏0
  • Java 最常见 200+ 面试题全解析:面试必备(附答案)

    摘要:的简称,运行环境,为的运行提供了所需环境。分割字符串,返回一个分割后的字符串数组。线程安全是线程安全的,而是非线程安全的。迭代器取代了集合框架中的,迭代器允许调用者在迭代过程中移除元素。 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Clou...

    hufeng 评论0 收藏0

发表评论

0条评论

qqlcbb

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<