延迟加载触发不了?这4种MyBatis正确用法你必须掌握

第一章:延迟加载失效的常见原因与排查思路

在使用 ORM 框架(如 Hibernate、Entity Framework 或 GORM)开发应用时,延迟加载(Lazy Loading)是一种优化性能的重要机制。然而,在实际开发中,延迟加载常因配置或调用时机问题而失效,导致意外的 N+1 查询或空指针异常。

访问时机不当

延迟加载的核心是“按需加载”,但若在 Session 或 DataContext 已关闭后访问关联属性,将无法触发数据查询。例如,在 Spring 中未启用 Open Session In View 模式时,Controller 层访问 Service 层返回的实体的懒加载属性,会抛出 LazyInitializationException。

代理对象未正确生成

ORM 框架通常通过动态代理实现延迟加载。若实体类或其关联属性被声明为 final,或使用了不兼容的构造方式,可能导致代理创建失败,从而退化为立即加载。确保实体类可被继承,且关联字段使用 protected 或 package-private 访问级别。

配置缺失或错误

检查映射配置是否显式指定懒加载策略。以 JPA 为例:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "order")
private List items;
上述代码明确设置 FetchType.LAZY,若遗漏则默认可能为 EAGER。
  • 确认框架版本是否支持当前配置语法
  • 检查全局配置是否强制关闭了延迟加载
  • 验证序列化操作是否提前触发了属性访问
常见原因检测方法解决方案
Session 已关闭捕获 LazyInitializationException启用 Open Session In View 或手动初始化
代理生成失败打印对象 getClass() 是否包含 $$_移除 final 修饰符,使用默认构造函数
配置错误查看日志中 SQL 执行时机显式声明 LAZY 加载策略

第二章:基于XML配置的延迟加载触发方法

2.1 理解MyBatis延迟加载机制的核心原理

MyBatis的延迟加载(Lazy Loading)是一种优化查询性能的重要机制,它允许在真正访问关联对象时才触发SQL查询,避免一次性加载大量无用数据。
延迟加载的触发条件
当启用延迟加载后,MyBatis会为关联对象生成代理对象。只有在调用其getter方法时,才会执行对应的SQL语句。该机制依赖于Java动态代理或CGLIB字节码增强技术。
配置方式与关键参数
通过全局配置启用延迟加载:
<settings>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="false"/>
</settings>
其中,lazyLoadingEnabled开启延迟加载,aggressiveLazyLoading设为false表示仅在访问具体属性时加载,而非调用任意方法即触发。
典型应用场景
适用于一对一、一对多等关联映射,尤其在主数据频繁访问而关联数据较少使用时效果显著。

2.2 全局配置中启用延迟加载与代理策略

在MyBatis的全局配置中,合理设置延迟加载与代理策略能显著提升系统性能和资源利用率。
配置项详解
通过<settings>标签启用延迟加载,并指定使用CGLIB作为代理工具:
<settings>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="false"/>
  <setting name="proxyFactory" value="cglib"/>
</settings>
上述配置中,lazyLoadingEnabled开启延迟加载;aggressiveLazyLoading设为false确保仅加载被调用的关联对象;proxyFactory选择cglib可避免实体类必须实现接口的限制,增强灵活性。
策略对比
代理类型依赖接口性能表现
JAVASSIST否中等
CGLIB否较高

2.3 在resultMap中正确配置association延迟加载

在MyBatis中,`association`标签用于映射一对一关联关系。通过合理配置,可实现延迟加载以提升查询性能。
启用延迟加载的前提
需在MyBatis配置文件中开启延迟加载:
<settings>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="false"/>
</settings>
其中,`aggressiveLazyLoading`设为`false`表示仅加载被调用的关联属性,避免全量加载。
resultMap中的association配置
<resultMap id="UserWithRoleResult" type="User">
  <id property="id" column="user_id"/>
  <result property="name" column="user_name"/>
  <association property="role" 
               javaType="Role"
               select="selectRoleById" 
               column="role_id"
               fetchType="lazy"/>
</resultMap>
此处`fetchType="lazy"`明确指定该关联启用延迟加载,`select`指向另一个查询语句,`column`传递外键值。 延迟加载机制确保用户数据加载时不会立即执行角色查询,仅当调用`getUser().getRole()`时才触发SQL执行,有效减少初始查询负载。

2.4 在resultMap中实现collection的延迟加载实践

在MyBatis中,`resultMap` 的 `collection` 标签支持一对多关联映射,结合延迟加载可显著提升查询性能。通过配置 `fetchType="lazy"`,可以实现按需加载子集合。
延迟加载配置示例
<resultMap id="BlogResult" type="Blog">
  <id property="id" column="blog_id"/>
  <result property="title" column="title"/>
  <collection property="posts" 
              ofType="Post" 
              column="blog_id"
              select="selectPostsByBlogId"
              fetchType="lazy"/>
</resultMap>
上述配置中,`select` 指定子查询语句,`column` 传递外键参数,`fetchType="lazy"` 启用延迟加载,仅在访问 `posts` 集合时触发子查询。
全局配置要求
  • 需在 mybatis-config.xml 中启用延迟加载:
  • <setting name="lazyLoadingEnabled" value="true"/>
  • <setting name="aggressiveLazyLoading" value="false"/>
该机制适用于博客-文章、订单-明细等场景,有效减少初始SQL的资源消耗。

2.5 验证XML方式下延迟加载的SQL执行时机

在MyBatis的XML映射配置中,延迟加载(Lazy Loading)机制可有效优化关联查询的性能。通过配置``并结合``或``标签,可实现按需触发SQL执行。
延迟加载触发场景
延迟加载的SQL并非在主查询时执行,而是在实际访问关联对象属性时才发起数据库请求。例如:

<resultMap id="UserResultMap" type="User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <association property="profile" 
               javaType="Profile"
               select="selectProfileByUserId" 
               column="id"/>
</resultMap>

<select id="selectUserById" resultMap="UserResultMap">
  SELECT id, name FROM users WHERE id = #{id}
</select>
上述配置中,`selectProfileByUserId`仅在调用`user.getProfile()`时执行。
执行时机验证流程
  • 执行主查询,加载User对象
  • 此时Profile字段为代理对象,未执行SQL
  • 首次调用getProfile()方法时,MyBatis拦截并执行关联SQL

第三章:基于注解模式的延迟加载实现方案

3.1 使用@Results与@One注解配置一对一延迟加载

在MyBatis中,通过@Results与@One注解可实现一对一关系的延迟加载,提升查询性能并降低内存消耗。
注解作用解析
  • @Results:用于定义结果映射集合,替代XML中的。
  • @One:表示一对一关联,其select属性指定延迟加载的目标查询方法。
代码示例
@Results({
    @Result(property = "profile", column = "user_id",
            one = @One(select = "com.example.mapper.ProfileMapper.findByUserId", 
                       fetchType = FetchType.LAZY))
})
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Integer id);
上述代码中,当调用findById时,不会立即加载profile数据,仅在首次访问该属性时触发ProfileMapper.findByUserId查询,实现延迟加载。fetchType设为LAZY确保懒加载行为生效。

3.2 使用@Many注解实现一对多关系的延迟加载

在ORM框架中,`@Many`注解用于定义实体间的一对多关联,并支持延迟加载以提升性能。通过配置`fetch = FetchType.LAZY`,可在主实体加载时不立即查询关联集合。
注解配置示例
@Entity
public class User {
    @Id private Long id;
    
    @Many(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private List orders;
}
上述代码中,`User`与`Order`构成一对多关系。`@Many`标注的`orders`字段仅在调用其getter方法时触发数据库查询,避免冗余数据加载。
延迟加载机制优势
  • 减少初始查询的数据量,提升响应速度
  • 按需加载关联数据,优化内存使用
  • 适用于大集合场景,降低数据库压力

3.3 注解模式下验证延迟加载的实际调用行为

在注解驱动的持久层设计中,延迟加载的触发时机往往依赖于代理机制与运行时上下文。通过@OneToOne(fetch = FetchType.LAZY)声明关联关系后,实际数据获取行为并不会在主实体加载时立即执行。
延迟加载的调用验证
使用Hibernate时,可通过调试日志观察SQL生成时机:

@Entity
public class User {
    @Id private Long id;
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "profile_id")
    private Profile profile;
}
上述代码中,仅当调用user.getProfile()并访问其属性时,才会触发对profile表的SELECT查询。
代理对象的行为分析
  • Hibernate创建Profile的代理子类,初始状态为空引用
  • 首次访问关联属性时,代理拦截调用并委托给Session加载数据
  • 若会话已关闭,则抛出LazyInitializationException

第四章:Spring集成环境下延迟加载的最佳实践

4.1 Spring Boot中开启MyBatis延迟加载的完整配置

在Spring Boot项目中集成MyBatis时,开启延迟加载可有效提升查询性能,避免关联对象的冗余加载。
启用延迟加载配置
需在application.yml中配置MyBatis全局设置:
mybatis:
  configuration:
    lazyLoadingEnabled: true
    aggressiveLazyLoading: false
其中,lazyLoadingEnabled开启延迟加载机制,aggressiveLazyLoading设为false表示仅加载被调用的关联属性,而非全部。
实体关系映射示例
使用@Results注解定义关联映射,如:
@Result(property = "user", column = "user_id", 
        one = @One(select = "findUserById", fetchType = FetchType.LAZY))
该配置表明在查询主实体时,user字段将按需通过指定方法进行懒加载。
关键参数说明
  • lazyLoadingEnabled:核心开关,必须启用
  • aggressiveLazyLoading:关闭以避免意外触发全关联加载
  • fetchType = LAZY:显式指定字段为懒加载模式

4.2 解决事务边界导致延迟加载失效的问题

在持久层操作中,延迟加载常因事务提前关闭而失效。当实体脱离事务上下文后,访问关联属性将抛出 LazyInitializationException。
常见解决方案对比
  • Open Session in View:延长会话生命周期,但可能增加数据库连接持有时间;
  • 立即加载(Eager Fetching):通过 JPQL 或注解预加载关联数据;
  • 服务层事务扩展:将事务边界延伸至业务方法,确保延迟加载可用。
代码示例:使用 @Transactional 延伸事务
@Service
@Transactional
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public UserDTO getUserWithOrders(Long id) {
        User user = userRepository.findById(id).orElseThrow();
        // 此处触发延迟加载,因仍在事务内,操作合法
        return new UserDTO(user.getName(), user.getOrders().size());
    }
}
上述代码中,@Transactional 注解确保方法执行期间事务未关闭,允许在返回前安全访问 user.getOrders()。参数 id 用于查询主实体,关联集合在此事务上下文中完成初始化。

4.3 结合OpenSessionInView模式保障延迟加载可用性

在使用Hibernate等ORM框架时,延迟加载(Lazy Loading)常因Session提前关闭导致LazyInitializationException。OpenSessionInView模式通过将Session生命周期绑定到整个HTTP请求周期,确保在视图渲染阶段仍可访问关联数据。
核心实现机制
该模式依赖过滤器(Filter)在请求开始时打开Session,并在响应完成后再关闭:

@Bean
public OpenSessionInViewFilter openSessionInViewFilter() {
    OpenSessionInViewFilter filter = new OpenSessionInViewFilter();
    filter.setSessionFactoryBeanName("sessionFactory");
    return filter;
}
上述配置确保了即使Service层已返回数据,View层访问user.getOrders()等懒加载属性时,Session依然处于打开状态。
使用场景与权衡
  • 适用于读多写少、关联复杂的应用场景
  • 可能延长数据库连接占用时间,需合理配置连接池
  • 在高并发环境下应谨慎启用,避免连接耗尽

4.4 利用日志和监控工具验证延迟加载生效状态

在应用延迟加载机制后,必须通过日志与监控手段确认其实际生效状态。首先,启用框架的日志输出功能,观察实体加载行为。
启用Hibernate SQL日志
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
该配置可输出SQL执行详情。若延迟加载生效,仅当访问关联属性时才会触发SELECT语句。
集成Prometheus监控指标
通过暴露自定义指标跟踪代理对象初始化次数:
Counter lazyLoadCounter = Counter.build()
    .name("hibernate_lazy_load_total").help("Lazy load events")
    .register();
在拦截器中递增此计数器,结合Grafana可视化,可实时判断延迟加载调用频率。
  • 日志分析:检查是否避免了不必要的关联查询
  • 监控告警:异常高频的代理初始化可能表明N+1问题

第五章:掌握延迟加载本质,构建高性能数据访问层

理解延迟加载的核心机制
延迟加载(Lazy Loading)是一种按需加载关联数据的策略,避免一次性加载大量无关信息。在实体框架中,当访问导航属性时才触发数据库查询,有效减少初始查询负载。
实体框架中的实现方式
启用延迟加载需满足:导航属性必须声明为 virtual,且上下文配置允许延迟加载。
public class Order
{
    public int Id { get; set; }
    public virtual Customer Customer { get; set; } // virtual 启用延迟加载
}
性能对比分析
以下为不同加载策略在加载1000条订单时的平均响应时间:
加载方式查询时间(ms)内存占用(MB)
立即加载 (Include)480120
延迟加载12035
显式加载21045
规避常见陷阱
  • 序列化时意外触发加载:JSON 序列化可能访问所有属性,导致“N+1查询”问题
  • 关闭上下文后访问导航属性将抛出异常
  • 在循环中使用延迟加载极易引发性能瓶颈
优化实践建议
结合 ProjectTo 或 DTO 投影,仅获取前端所需字段:
var result = context.Orders
    .Where(o => o.Status == "Pending")
    .Select(o => new OrderSummaryDto {
        Id = o.Id,
        CustomerName = o.Customer.Name,
        Total = o.Items.Sum(i => i.Price)
    })
    .ToList();
【Mybatis】延迟加载原理 延迟加载 延迟加载如何使用 Setting 参数配置 设置参数 描述 有效值 默认值 lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 true、false false aggressiveLazyLoading 当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods). true、false false 阅读详情

相关推荐

从零搭建IoT数据中台:STM32+WebSocket实现边缘设备与Web端实时双向通信

本文详细介绍了如何从零搭建基于STM32和WebSocket协议的IoT数据中台,实现边缘设备与Web端的实时双向通信。通过硬件选型、协议设计、服务器搭建及安全优化,提供了一套低延迟、高并发的企业级解决方案,适用于智能农业和工业监控等场景。

tea88的博客 749

Mybatis 之 延迟加载

问题 在开发过程中很多时候我们并不需要总是在加载⽤户信息时就⼀定要加载他的订单信息。此时就是我们所说的延迟加载。 举个栗⼦延迟加载 就是在需要⽤到数据时才进⾏加载,不需要⽤到数据时就不加载数据。延迟加载也称懒加载。在association和collection标签中都有⼀个fetchType属性,通过修改它的值,可以修改局部的加载策略。 全局延迟加载 在Mybatis的核⼼配置⽂件中可以使⽤setting标签修改全局的加载策略。 注意 局部的加载策略的优先级高于全局的加载策略

凉茶铺的博客 8981

ABAP OO - ALV_TREE例程

项目上比较少有用到ALV_TREE的报表功能,刚好项目上有写了一次,也查阅大量的范例,整合了一写法,给自己做一下笔记。 程序包含功能按钮,按钮下拉,F4帮助,读取选中行,字段双击触发事件,字段前置图标,更新节点,获取节点数据,获取全部子节点,递归算法,DMS模块:创建文档功能,创建文档链接,SNRO创建流水号,缓存数据,下次用户加载进来继续操作。 *&---------------------------------------------------------------------* *&a

大步甩起来 4989

4. MyBatis 延迟加载

文章目录MyBatis 延迟加载1. 什么是延迟加载2. 测试环境准备3. 开启延迟加载4. 总结 MyBatis 延迟加载 1. 什么是延迟加载 ​ 延迟加载也称为懒加载、惰性加载,使用延迟加载可以提高程序的运行效率,针对数据持久层的操作,在某些特定查询的情况下去访问特定的数据库,在其他情况下可以不访问某些数据表,尽量减少 SQL 的执行,从而达到提高速度的目的,是对数据库操作的一种优化。 说明:延迟加载只存在于数据表的级联查询中,单表查询没有延迟加载的功能。 具体的业务场景:数据库中有班级表(Cl

qq_41775769的博客 6432

用户画像标签维度_搭建电商平台用户画像标签体系

01 整体思路电商平台连接了卖家和买家两端,最终目的都是促进交易,从而追求更高的销售额。提高人货匹配度是促进交易的关键,而提高人货匹配度的关键就是“让买家找到想要的货物”。本文结合“人、货、场”理论模型,尝试建立电商平台的用户画像标签体系。02 三类标签用户在平台购物的整体流程可以概括为:进入平台、选择商品、下单付款。可以将该过程抽象为“人、货、场”。即用户通过什么途径进入什么商品的页面...

weixin_31668621的博客 1642

彻底解决tplink路由器无法访问部分https网站

彻底解决tplink无法访问部分https网站

renkai721的专栏 8762

Mybatis延迟加载

延迟加载(Lazy Loading)是一种设计模式,用于在应用程序运行过程中推迟对象的创建和数据的加载,直到需要使用它们时才进行加载。在MyBatis中,延迟加载机制可以有效提高性能,避免不必要的数据加载,尤其适用于涉及复杂数据关系的场景。当查询的对象包含延迟加载属性时,MyBatis会生成一个代理对象,并且代理对象在访问延迟加载的属性时才会触发实际的数据库查询。因此,在使用延迟加载时,需要根据具体的业务需求,权衡是否使用该功能,并结合性能优化手段进行合理配置。在MyBatis中,延迟加载通过。

weixin_64235858的博客 2011

为何wait和notify方法必须加锁?

为何wait和notify方法必须加锁? 是为了避免Lost Wake Up问题,即丢失唤醒问题。 所谓Lost Wake Up,指的是:线程A调用wait()方法进入阻塞状态,接下来没有其他线程去唤醒线程A,或者其他线程唤醒的时机不对(早于线程A的wait()),导致线程A永远阻塞下去。 下面以一个生产者和消费者的案例来说明上述问题。 假如我们有两个线程,一个消费者线程,一个生产者线程。生产者线程的任务可以简化成将count加一,而后唤醒消费者;消费者则是将count减一,而后在减到0的时候陷入睡眠,.

打酱油的葫芦娃 9155

Mybatis的延迟加载

mybatis的延迟加载是通过和属性进行控制的,当一对一需要实现延迟加载时,需要打开延迟加载开关以及通过标签的select属性指定延迟加载对象查询的方法路径,column属性指定执行参数,在使用到其延迟加载对象时,mybatis才会进行查询。当一对多时,通过标签的select属性指定延迟加载对象查询的方法路径,column属性指定执行参数,在使用到其延迟加载对象时,mybatis才会进行查询。

qq_45794852的博客 2754

llama-factory微调qwen2.5-vl

使用llama-factory完成qwen2.5-vl微调

qq_44908396的博客 2933

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1149

Mybatis 中的延迟加载

1、问题提出 在之前的文章一对多中,当我们有一个用户,他又一百个账户。 (1)在查询用户时,要不要把关联的账户信息查询出来? (2)在查询账户时,要不要把关联的用户信息查询出来? 对于第一个问题,我们应该是什么时候需要查询账户信息,才查询。没必要每次查询用户信息都把账户信息也查询出来。因为如果每次都查询出账户信息,对我们的内存开销是很大的,而且每次查询也都不一定用到账户信息。 对于第二个问题,...

Zystem 9418

YOLOv11涨点改进| CVPR 2026 | 全网独家首发、特征融合改进篇| 引入SRFusion 空间细化多级融合,含多种创新融合改进,涨点可直接发论文,适合裂缝图像检测,小目标检测任务高效涨点

🔥本文提出SRFusion空间细化多级融合模块,用于改进YOLOv11网络模型。该模块通过高分辨率特征引导低分辨率语义特征的融合,利用空间注意力机制对上采样后的特征进行加权细化,增强多尺度特征间的空间细节交互。SRFusion模块能够提升模型对目标区域的表达能力,有效改善小目标、密集目标及复杂背景场景下的检测效果,同时保持YOLOv11的高效性与实时检测性能。文章详细介绍了模块结构、实现原理、核心代码及在YOLOv11中的三种配置方法,为模型优化提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 148

MyBatis延迟加载及缓存

MyBatis延迟加载与缓存机制详解 摘要: MyBatis提供延迟加载功能优化数据访问性能,通过代理对象实现按需加载关联数据,减少初始加载时间和内存消耗。配置需在mybatis-config.xml中开启lazyLoadingEnabled,通过fetchType指定关联关系加载策略。同时MyBatis具备两级缓存机制:一级缓存为SqlSession级别,默认开启;二级缓存为Mapper级别,需显式配置,可跨SqlSession共享。缓存机制通过减少数据库访问提升性能,但需注意N+1问题和缓存一致性。实体

qq_21262107的博客 1677

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mybatis延迟加载

延迟加载(Lazy Loading)是一种按需加载的机制,只有在真正使用数据时才进行加载,而不是在初始化对象时立即加载所有数据。MyBatis 延迟加载是一项强大的功能,可以通过按需加载数据优化系统性能。在实际开发中,需要根据业务场景合理设计延迟加载策略,避免不必要的性能开销。同时,使用全局配置和映射文件中的延迟加载选项,可以更加灵活地控制加载行为。

Flying_Fish_roe的博客 2017

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Mybatis延迟加载实现原理

MyBatis 通过动态代理机制实现了对关联关系和集合关系的延迟加载,帮助开发者在复杂的对象关系处理中提升性能。通过延迟加载,MyBatis 可以仅在需要时才执行数据库查询,避免不必要的数据加载,节省资源。然而,延迟加载并不是万能的,它也有可能带来性能上的隐患(如 N+1 查询问题)。因此,在实际应用中,开发者需要根据具体场景来合理配置 MyBatis 的延迟加载功能,以获得最佳的性能表现。

Flying_Fish_roe的博客 1123

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Mybatis】延迟加载的原理是什么?

数据库访问在现代应用程序中扮演着至关重要的角色,而 MyBatis 作为一种优秀的持久层框架,为开发者提供了强大而灵活的工具。其中,延迟加载作为一项关键的特性,使得在处理复杂的关联关系时能够更加智能地加载数据,提高系统的性能和资源利用效率。本文将深入探讨 MyBatis 延迟加载的原理,以及如何巧妙地运用这一特性来优化数据库访问。MyBatis 的延迟加载为开发者提供了更为细粒度的数据加载控制,使得在数据库访问中能够更加灵活、高效。

AliceNo的博客 1764

mybatis的延迟加载

1.延迟加载是什么 延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时机。 2.为什么要进行延迟加载 在Mybatis中经常用到关联查询,但是并不是任何时候都需要立即返回关联查询结果。比如查询订单信息,并不一定需要及时返回订单对应的产品信息,查询商品分类信息并不一定要及时返回该类别下有哪些产品,这种情况一下需要一种机制,当需要查看时,再执行查询,返回需要的结果集,这种需求在Mybatis...

Weleness的博客 4547

MyBatis如何处理延迟加载?

MyBatis如何处理延迟加载?

java1234的博客 947

为什么你的延迟加载不生效?5步定位MyBatis触发失败原因

快速定位MyBatis延迟加载失效问题,系统解析延迟加载的触发方法与配置要点。涵盖一对一、一对多场景下的代理机制、属性设置及常见误区,助你精准排查加载失败原因。掌握核心配置与调试技巧,值得收藏。

CodeWhim的博客 855

mybatis延迟加载、缓存

延迟加载:当前查询用户的时候,没有把该用户所拥有的账户信息查询出来,而是使用账户数据的时候,再去查询账户的数据。②查询的时候,先从SqlSession的缓存中查找,如果有,直接返回,如果没有,再去查询数据库。可以看出,sql语句只执行了一次,说明它是查的缓存,但是地址不一样,因为他从缓存里组装出来的。二级缓存的适用对象地址不同,但是也从缓存加载,二级缓存存储的是零散数据,是组装出来的对象。(2)查询用户的时候,可以先不查账户信息,需要账户信息的时候再去查,这时选择延迟加载。

2201_76081438的博客 1465

MyBatis关联查询性能翻倍秘诀(延迟加载触发机制深度解读)

掌握MyBatis的延迟加载触发方法,有效提升关联查询性能。适用于多表嵌套场景,通过配置lazyLoadingEnabled和使用association实现按需加载,减少内存消耗,显著优化系统响应速度,值得收藏。

DebugLoom的博客 1008

【MyBatis】Mybatis 延迟加载

【MyBatis】Mybatis 延迟加载1. 延迟加载简介2. 关联对象加载时机3. 直接加载4. 侵入式延迟加载5. 深度延迟加载6. 延迟加载总结 1. 延迟加载简介 MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,...

来日浅谈的博客 967

MyBatis - SQL执行过程(十五)延迟加载

MyBatis - SQL执行过程(十五)延迟加载 该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对各位读者会不太友好,阅读前需要对 MyBatis 和 Spring 有一定的了解。比较适合刚接触,会使用但是一直没去探究底层的同学。 MyBatis 版本:3.5.6 MyBatis-Spring 版本:2.0.3 MyBatis-Spring-Boot-Starter 版本:2.1.4 该系列其他文档请查看:《 MyBatis 系列 - 导读》 MyBatis的SQL执行过程 在前

Zack_tzh的博客 2万+
上一篇: 揭秘Java 9 try-with-resources新特性:为何它能减少90%的资源泄漏?
下一篇: 【Java 15 ZGC深度解析】:掌握TB级堆内存配置的黄金法则
StepLens
博客等级 码龄1年 149粉丝 2031原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值