SpringBoot延迟加载

简介: CSS实现元素吸顶功能,比较简单的一种实现方式

需求:

我们查询所有的员工列表,然后根据员工的部门编号查询对应的部门信息

如何解决

方式一:连接查询。一条SQL语句查询出所有的信息

方式二: 延迟加载。关联表的数据只有在真正使用的时候才去查询,不使用不查询。

优点

先从单表查询,需要时再从关联表去关联查询,大大提高了数据库的性能,因为单表查询要比关联查询多张表速度要快。

配置方法

延迟加载多用在关联对象和集合中,association和collection具备设置延迟加载的功能

设置全局开关

在mybatis-config.xml中打开延迟加载的开关。配置完成后,所有的association和collection元素都生效

<settings><!--开启全局的懒加载--><settingname="lazyLoadingEnabled"value="true"/><!--是否立即加载,其实不用配置,默认为false--><settingname="aggressiveLazyLoading"value="falsec"/></settings>



lazyLoadingEnabled MyBatis是否开启延迟加载的总开关,当开启时,所有关联对象都会延迟加载。特定关联关系中,可通过设置fetchType属性来覆盖该项的开关状态 true /false false
aggressiveLazyLoading 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。否则,每个延迟加载属性会按需加载 true  /false false
在 3.4.1 及之前的版本默认值为 true

配置单项开关

在指定的association和collection元素中配置fetchType属性。该属性配置将覆盖全局延迟设置.

eager 立即加载
lazy 延迟加载


代码实现

用户类及账户类

publicclassUserimplementsSerializable{
privateIntegerid;
privateStringusername;
privateDatebirthday;
privateStringsex;
privateStringaddress;
privateList<Account>accountList;
get和set方法省略.....      
}
publicclassAccountimplementsSerializable{
privateIntegerid;
privateIntegeruid;
privateDoublemoney;
get和set方法省略.....      
}

Mapper.java

publicinterfaceUserMapper {
/*** 查询所有的用户*/List<User>findAll();
}
publicinterfaceAccountMapper {
/*** 根据用户ID查询账户信息* @return*/List<Account>findAllByUid(Integeruid);
}

Mapper.xml文件

userMapper.xml

<resultMapid="userAccountMap"type="com.example.domain.User"><idproperty="id"column="id"/><resultproperty="username"column="username"/><resultproperty="birthday"column="birthday"/><resultproperty="sex"column="sex"/><resultproperty="address"column="address"/><collectionproperty="accountList"ofType="com.example.domain.Account"column="id"select="com.example.dao.AccountDao.findAllByUid"/></resultMap><selectid="findAll"resultMap="userAccountMap">    SELECT * FROM USER;
</select>

accountMapper.xml

<selectid="findAllByUid"resultType="com.example.domain.Account">    SELECT * FROM account WHERE uid = #{uid};
</select>


注意:

通过懒加载查询完数据后,只需要确定SQL语句是否查询了对应的关联表即可。不要输出对象,否则相当于使用了对象,就会进行对应的关联查询。

目录
打赏
0
0
0
0
81
分享
相关文章
MongoDB中使用的SCRAM-SHA1认证机制
介绍 SCRAM是密码学中的一种认证机制,全称Salted Challenge Response Authentication Mechanism。 SCRAM适用于使用基于『用户名:密码』这种简单认证模型的连接协议。 SCRAM是一个抽象的机制,在其设计中需要用到一个哈希函数,这个哈希函数是
20788 0
Webstorm安装激活破解2022.09.07最新破解教程「永久激活,亲测有效」
本文讲的是2022.2.1版本的Webstorm破解、Webstorm激活码、Webstorm安装、Webstorm永久激活码的最新永久激活教程,本文有mac和windows系统的idea安装教程。
8442 0
Webstorm安装激活破解2022.09.07最新破解教程「永久激活,亲测有效」
大数据技术:开启智能决策与创新服务的新纪元
【10月更文挑战第5天】大数据技术:开启智能决策与创新服务的新纪元
关于API安全设计5A原则
【6月更文挑战第1天】5A原则包括身份认证、授权、访问控制、可审计性和资产保护,是安全设计的核心要素。
如何配置 DNS 轮询负载均衡以实现高可用性
如何配置 DNS 轮询负载均衡以实现高可用性
781 4
内网环境下 - 安装linux命令、搭建docker以及安装镜像
内网环境docker镜像的安装,以及内网环境如何安装linux命令
1838 3
内网环境下 - 安装linux命令、搭建docker以及安装镜像
Golang深入浅出之-Go语言中的协程池设计与实现
【5月更文挑战第3天】本文探讨了Go语言中的协程池设计,用于管理goroutine并优化并发性能。协程池通过限制同时运行的goroutine数量防止资源耗尽,包括任务队列和工作协程两部分。基本实现思路涉及使用channel作为任务队列,固定数量的工作协程处理任务。文章还列举了一个简单的协程池实现示例,并讨论了常见问题如任务队列溢出、协程泄露和任务调度不均,提出了解决方案。通过合理设置缓冲区大小、确保资源释放、优化任务调度以及监控与调试,可以避免这些问题,提升系统性能和稳定性。
460 6
fastadmin js里获取后端传的参数
fastadmin js里获取后端传的参数
399 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问