Mybatis的延迟加载
1.什么是延迟加载当加载用户信息时不一定就要马上加载他的订单信息或者所有的好友信息聊天记录等等这样就需要用到延迟加载。当我们需要用到数据的时候才进行加载不用数据的时候就不加载也可以叫做懒加载。优点先从单表查询需要时再从关联表去关联查询⼤⼤提⾼数据库性能因为查询单表要比关联查询多张表速度要快。缺点因为只有当需要用到数据时才会进行数据库查询这样在大批量数据查询时因为查询工作也要消耗时间所以可能造成⽤户等待时间变长造成用户体验下降。在多表中一对多多对多通常情况下采用延迟加载一对一多对一通常情况下采用立即加载注意延迟加载是基于(嵌套查询)来实现的2.实现局部延迟加载在association和collection标签中都有⼀个fetchType属性通过修改它的值可以修改局部的加载策略。?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !--命名空间方便隔离-- mapper namespacecom.lazyload.mapper.IAccountMapper !--将Account的信息和User的信息封装到ResultMap中去-- !-- property表示java实体类中属性的名称javaType表示属性的类型ofType表示泛型column表示应用查询的某列 select表示需要执行的sql语句 fetchType表示是否开启延迟加载eager取消延迟加载lazy开启延迟加载默认开启 -- resultMap iduserAccountMap typecom.lazyload.entites.Account id propertyid columnid/id result propertyuid columnuid/result result propertymoney columnmoney/result !--一对一的映射关系配置封装的内容 select属性指定的内容查询用户的唯一标识【com.itheima.dao.IAccountMapper方法名就是接口中的】 column属性指定的内容根据id查询时所需要的参数的值根据id来查询数据库的 -- association propertyuser columnuid javaTypecom.lazyload.entites.User selectfindAccountByUid feetchTypelazy/association /resultMap !--封装的查询所有-- select idfindAllAccount resultMapuserAccountMap select * from account /select !--根据用户id查询账户列表-- select idfindAccountByUid parameterTypeinteger resultTypecom.lazyload.entites.Account select * from account where uid#{uid} /select /mapper?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !--命名空间方便隔离-- mapper namespacecom.lazyload.mapper.IUserMapper !--写入user的resultMap:将user和数据库对应 作用建立SQL查询结果字段与实体属性的映射关系 -- resultMap iduserAccountMap typecom.lazyload.entites.User !--主键字段-- !--column所表示的是数据库中的字段名称-- id propertyid columnid/id !--非主键字段-- result propertyusername columnusername/result result propertybirthday columnbirthday/result result propertysex columnsex/result result propertyaddress columnaddress/result !--Userx下对应的对应Account账户的信息:配置user对象下account的映射-- collection propertyaccounts selectfindUserById columnid/collection /resultMap !--查询所有-- select idfindAll resultMapuserAccountMap select * from user /select !--查询一个通过id-- select idfindUserById parameterTypeint resultTypecom.lazyload.entites.User select * from user where id#{id} /select /mapper 参考链接:https://blog.csdn.net/friggly/article/details/124686876?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0-124686876-blog-108432460.235^v38^pc_relevant_default_basespm1001.2101.3001.4242.1utm_relevant_index3当查询用户基本信息时只返回用户基本信息而不进行其余账号信息的查询当触发关键方法的时候才进行查询具体的进入参考链接学习讲的非常好到位学习链接。全局延迟加载#全局启用延迟加载 mybatis.configuration.lazy-loading-enabletrue #为false时所有关联对象都会按需求加载 mybatis.configuration.aggressive-lazy-loadingfalse #设置方法触发加载,不设置时默认为下面这几个方法触发 mybatis.configuration.lazy-load-trigger-methodsequals,clone,hashCode局部加载策略优先级高于全局加载策略同时在xml映射文件里修改feetchType属性为eager来取消延迟加载。3、延迟加载原理实现它的原理是使用 CGLIB 或 Javassist( 默认 ) 创建目标对象的代理对象。当调用代理对象的延迟加载属性的 getting 方法时进入拦截器方法。比如调⽤ a.getB().getName() 方法进入拦截器的invoke(...) 方法发现 a.getB() 需要延迟加载时那么就会单独发送事先保存好的查询关联 B对象的 SQL 把 B 查询上来然后调用a.setB(b) 方法于是 a 对象 b 属性就有值了接着完成a.getB().getName() 方法的调用。这就是延迟加载的基本原理。总结延迟加载主要是通过动态代理的形式实现通过代理拦截到指定方法执行数据加载。

相关新闻

Web前端之domToImage文档、html标签元素转成图片

Web前端之domToImage文档、html标签元素转成图片

MENUDOM to ImageWhat is itInstallationNPMBowerUsageRendering optionsfilterbgcolorheight, widthstylequalitycacheBustimagePlaceholderBrowsersDependenciesSourceTestsHow it worksThings to watch out forAuthorsLicenseDOM to Image [外链图片转存失败,源站可能有防盗…

2026/7/5 15:49:29 阅读更多 →
别再把大数据平台当“巨石”了:聊聊云原生时代的大数据平台怎么活得更久

别再把大数据平台当“巨石”了:聊聊云原生时代的大数据平台怎么活得更久

别再把大数据平台当“巨石”了:聊聊云原生时代的大数据平台怎么活得更久 很多做大数据平台的朋友,一开始都会踩一个坑:把平台越做越大,最后大到自己都不敢动。 你有没有见过这样的场景: 一个 Hadoop / Spark 集群撑着公…

2026/7/3 4:44:24 阅读更多 →
系统不出事,才是运维的最高境界:聊聊如何打造“零故障运维系统”

系统不出事,才是运维的最高境界:聊聊如何打造“零故障运维系统”

系统不出事,才是运维的最高境界:聊聊如何打造“零故障运维系统” 作者:Echo_Wish 很多刚做运维的朋友,心里都会有一个误区: 运维的能力,体现在处理故障的速度。 比如: 服务器挂了 5 分钟恢复 数据库崩了 10 分钟修好 集群异常 30 分钟恢复 听起来很厉害,对吧? 但如…

2026/7/5 4:13:56 阅读更多 →

最新新闻

MetaCodable宏编程入门:快速掌握Swift Codable高级用法

MetaCodable宏编程入门:快速掌握Swift Codable高级用法

MetaCodable宏编程入门:快速掌握Swift Codable高级用法 【免费下载链接】MetaCodable Supercharge Swifts Codable implementations with macros meta-programming. 项目地址: https://gitcode.com/gh_mirrors/me/MetaCodable 想要提升Swift开发效率&#xf…

2026/7/5 15:48:39 阅读更多 →
【信息科学与工程学】【数据中心】【容灾备份】第三十一篇 云数据中心各类CPU计算型业务跨数据中心容灾设计方案

【信息科学与工程学】【数据中心】【容灾备份】第三十一篇 云数据中心各类CPU计算型业务跨数据中心容灾设计方案

一、云数据中心各类CPU计算型业务跨数据中心指标 1. Web应用服务 设计领域 设计子类 特征/函数 参数/指标 用途说明 数据中心内设计 数据中心间设计 网络设计​ 数据中心内网络 1. 负载均衡网络 2. 应用层网络 3. 数据库网络 4. 缓存网络 5. 管理网络 1. 带宽:>…

2026/7/5 15:44:38 阅读更多 →
K-Means 聚类的目标函数:簇内误差平方和

K-Means 聚类的目标函数:簇内误差平方和

1. 什么是 K-Means? K-Means 是一种无监督、迭代式的聚类算法: 给定数据集 {x₁, x₂, …, xₙ} 与预设簇数 K,算法把样本划分为 K 个不相交的簇 C₁, C₂, …, Cₖ,使得同一簇内样本尽可能相似,不同簇间样本尽可能远离…

2026/7/5 15:44:38 阅读更多 →
【信息科学与工程学】计算机科学与自动化——第三十八篇 质量工程 02 云数据中心质量工程

【信息科学与工程学】计算机科学与自动化——第三十八篇 质量工程 02 云数据中心质量工程

云数据中心质量工程体系(规划-评估-测试-验证-交付) 编码 阶段 层级 核心领域 子领域 质量属性/活动 关键交付物/指标 核心方法/工具 评估标准 挑战与风险 1 核心理念 战略层 质量哲学 可靠性即产品 将数据中心可靠性、性能、安全作为可销售、可承诺的服务产品…

2026/7/5 15:42:38 阅读更多 →
net 跨平台也是一句谎言

net 跨平台也是一句谎言

以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? c语…

2026/7/5 15:40:38 阅读更多 →
终极指南:如何用CSUR程序化生成系统打造真实城市道路网络

终极指南:如何用CSUR程序化生成系统打造真实城市道路网络

终极指南:如何用CSUR程序化生成系统打造真实城市道路网络 【免费下载链接】CSUR Offline procedural generation of realistic road environments in Cities: Skylines 项目地址: https://gitcode.com/gh_mirrors/cs/CSUR Cities: Skylines Urban Road (CSUR…

2026/7/5 15:38:37 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻