懒加载与急加载FetchType.LAZY&FetchType.EAGER的区别和使用?

简介: 1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。

1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。3、比方User类有两个属性,name跟address,登录后用户名是需要显示出来的,此属性用到的几率极大,要马上到数据库查,用急加载;而用户地址大多数情况下不需要显示出来,只有在查看用户资料是才需要显示,需要用了才查数据库,用懒加载就好了。所以,并不是一登录就把用户的所有资料都加载到对象中,于是有了这两种加载模式。

我们来用一个典型的案例作对比
一个用户有编号 用户名 ......和角色,正常情况下用户登录后不需要查询角色,但是现在我们想要查询到角色 一个用户可以有多个角色,员工角色是两张表 ,一般我们在项目配置中都是配置延迟加载(懒加载)

<configuration>
<!-- 启用延迟加载 -->
 <settings>
    <setting name="lazyLoadingEnabled" value="true" />
    <!--&lt;!&ndash;设置为false之后表示在访问many方的属性(非关联的对象的属性)的时候不要触发延迟加载&ndash;&gt;-->
    <setting name="aggressiveLazyLoading" value="false" />
    <!--&lt;!&ndash;当访问Object中的clone方法的时候触发延迟加载&ndash;&gt;-->
    <setting name="lazyLoadTriggerMethods" value="clone" />
</settings>

</configuration>
img_604f6a1c199976dbc68a083905a4bf01.png
延迟加载

我们在项目中有查询角色的sql(根据员工编号查询角色)

<collection property="roles" ofType="Role"
    select="com.jd.wms.mapper.RoleMapper.selectRolesByEmployeeId"
    column="id">
</collection>

调用RoleMapper里的方法查询角色


img_ef8d13e0054a6eebf36380a6b5a11e1b.png
EmployeeMapper.xml

sql查询出结果每一个用户id编号对应的角色

<select id="selectRolesByEmployeeId" resultMap="base_mapper">
    select r.* from t_employees_roles er join t_role r on er.role_id=r.id 
    where er.employee_id = #{empId}
</select>
img_10f9440e6d5870377e55541b3fb9cd52.png
RoleMapper.xml

查询出的结果是

img_cf58f30d6a4f2b61fb3ca3ed1611d2b4.png
查询结果

我们明明写了查询语句但是却没有查询到原因就是我们启用了延迟加载

现在我们的需求是需要把角色也显示出来怎么破?
这时我们就需要使用fetchType.eager(急加载)
添加一个属性fetchType="eager"

<collection property="roles" ofType="Role"   
 select="com.jd.wms.mapper.RoleMapper.selectRolesByEmployeeId"
 column="id" fetchType="eager">
</collection>
img_954fa83097467ea86fbc56b1e9fa000e.png
fetchType.eager

这时我们发送请求得到的结果就是

img_0c761209657e1c8fc37d9e4dfea142e9.png
目录
相关文章
|
缓存 Java 测试技术
Spring Boot 2.7.0 更新说明
Spring Boot 2.7.0 更新说明
2169 0
|
XML Android开发 数据格式
IDEA代码格式和JavaDoc设置,一键告别丑陋代码
IDEA代码格式和JavaDoc设置,一键告别丑陋代码
2577 1
IDEA代码格式和JavaDoc设置,一键告别丑陋代码
|
3月前
|
数据可视化 BI 文件存储
2026 实测分享:好用的个人 Todo 管理工具有这些
2026年,轻量化Todo工具成主流:聚焦待办本质,界面清爽、操作极简、视图直观。支持卡片拖拽、状态分区、多端同步,兼顾个人规划与小团队协作,真正实现“零学习成本、高执行效率”。
503 0
|
6月前
|
人工智能 算法 IDE
🚀 7个超实用的斜杠命令,让你的编码速度翻倍!
CodeBuddy IDE 内置7个高效斜杠命令:`/init`项目初始化、`/summarize`对话压缩、`/rules`规范生成、`/explain`代码讲解、`/fix`智能修复、`/tests`测试生成、`/cr`深度审查。覆盖开发全周期,助全栈开发者提速60%+,8分钟掌握实战技巧!
883 1
|
8月前
|
弹性计算 缓存 网络协议
阿里云云解析 DNS 多少钱?2026年19.9 元的阿里云云解析 DNS 个人版功能与价值解析
在域名使用过程中,DNS 解析是连接域名与服务器的关键环节,直接影响用户访问速度与服务稳定性。阿里云推出的云解析 DNS 个人版,当前有 19.9 元 / 年的优惠(原价 48 元 / 年),针对个人开发者需求提供了实用功能,下面从价格、核心功能、适用场景等方面详细说明,帮助用户判断是否值得选择。
|
Java
介绍String.format()方法中的格式占位符用法。
通过综合使用它们,可以在Java中构造非常具体和高度定制的输出格式。这对于输出报道、创建用户界面或者任何需要精确控制输出格式的场合都非常有用。记住,当使用格式化方法时,需要确保提供的输入参数与占位符类型匹配,否则会抛出 java.util.IllegalFormatException。
1383 0
|
SQL 安全 Java
Spring Boot 学习研究笔记(十七) -Spring boot JPA的复杂查询
Spring Boot 学习研究笔记(十七) -Spring boot JPA的复杂查询
1268 102
|
Java 索引
Java“ArrayIndexOutOfBoundsException”解决
Java中的“ArrayIndexOutOfBoundsException”异常通常发生在尝试访问数组的无效索引时。解决方法包括:检查数组边界,确保索引值在有效范围内;使用循环时注意终止条件;对用户输入进行验证。通过这些措施可以有效避免该异常。
3385 2
|
人工智能 自然语言处理 搜索推荐
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
在人工智能的浪潮中,大型语言模型(LLM)无疑是最引人注目的潮头。在支撑这些大型语言模型应用落地方面,文本向量化模型(Embedding Model)的重要性也不言而喻。 近期,我在浏览huggingface发现,国产自研文本向量化模型acge_text_embedding(以下简称“acge模型”)已经在业界权威的中文语义向量评测基准C-MTEB(Chinese Massive Text Embedding Benchmark)中获得了第一名。
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
|
消息中间件 缓存 Java
高性能架构设计
高性能架构设计
641 5

热门文章

最新文章