MyBatis

延迟加载

什么是延迟加载

ResultMap可以实现高级映射(使用association和collection实现一对一以及一对多映射)

其中association和collection都具备延迟加载功能

  • 需求分析:

如果查询订单并且关联查询用户信息, 如果查询订单就满足需要当我们需要查询用户信息的是在去按需加载,把对用户的信息的查询不是立即查询,而是按需加载。

延迟加载:从单表查询 ,需要的时候再从关联表去查询,大大提高数据库的性能,因为查询单表要比查询关联表速度快

使用association延迟加载

开发步骤:

a.需求分析

b.配置mapper.xml和编写mapper.java接口

c.在sqlMapConfig.xml中加载配置文件并编写测试代码进行debug调试

a.需求分析

查询订单并且关联查询用户信息

如果查询的订单已经满足条件,但并不需要查询用户,此时用户的信息就是按需加载

Orders:

11cac516acac5356f9de641cb091da4e.png

b.配置mapper.xml和编写mapper.java接口

分析:

1.执行mapper方法findOrderUserLazyLoading 内部调用 只会查询orders信息

2.在程序中遍历上一步查询的List<Orders>

3.延迟加载 再去调用 相关的用户信息 才会执行findUserById进行延迟加载用户信息

  • mapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
  • mapper.java:
public 

c.在sqlMapConfig.xml中加载配置文件并编写测试代码进行debug调试

a66dce59c179f2ac5de9e4f0b7e7840d.png

c42808b7f3b435f8faf48416f3762a07.png

测试代码:

2f77911becce67d7ea05cbbeddfada96.png

测试结果分析:

执行到第一个断点时,list集合已查询出结果,但其对应的user为null(按需加载)

200c02ed2e36438651990772ca9840cb.png

当执行到第二个断点,依次获取每个orders中的user数据,一步步执行,数据依次显示,user用户信息按需加载

9d648de31e9a5b1cfb0bca2cf2028fff.png
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐